2016-07-07 5 views
2

ファイル名に配列の電話番号を追加しようとしています。 私のテストファイルは以下のとおりです。ファイル名から電話番号を抽出するためのPHP正規表現

dsfdsf543-6786sdfsdfd.jpg 
543-6786sdfsdfd.jpg 
435-3454 
dsfdsf543-6786.jpg 
123-4567 
543-6786.jpg 
345-3454 

私の目標は、別の電話番号は、配列内の要素の別の行を持つことになりますです。配列行の各要素は同じ電話番号を持ちます。たとえば :

543-6786 dsfdsf543-6786sdfsdfd.jpg 543-6786sdfsdfd.jpg dsfdsf543-6786.jpg 543-6786.jpg 
435-3454 
123-4567 
345-3454 

マイコード:

$directory = $_SERVER['DOCUMENT_ROOT']; 
$handler = opendir($directory); 
while ($file = readdir($handler)) { 


    if ($file != "." && $file != "..") { 
     $regex = "/[\D]*[0-9]{3}-[0-9]{4}[\D]*/"; 
       preg_match_all($regex, $file, $results); 

    } 
} 
print_r ($results); 

結果は

Array ([0] => Array ([0] => 345-3454)) 

配列で、なぜ唯一のファイル名ですか? 私のミスはどこですか? ありがとうございます!

+0

解決策ではなくヒントです。式は '〜\ D * \ d {3} - \ d {4} \ D *〜'に簡略化できます。文字クラスに '\ D'を入れる必要はなく、' [0-9] ' 'PCRE'の' \ d'と同じです。 – Jan

+0

'$ regex =" /(?<!\ d)[0-9] {3} - [0-9] {4}(?!\ d)/ ";' –

答えて

3

ファイル名をpreg_match_allに一度に1つずつ入力し、毎回$resultを上書きします。問題は、毎回$results[0]を配列にプッシュし、その配列をダンプすることです。コメントごとに更新

$final_results = []; 
while ($file = readdir($handler)) { 
    if ($file != "." && $file != "..") { 
     $regex = "/[\D]*[0-9]{3}-[0-9]{4}[\D]*/"; 
     if (preg_match_all($regex, $file, $results) > 0) 
      $final_results[] = $results[0] ; 
    } 
} 
print_r ($final_results); 

:このバージョンでは、電話番号がキーであり、値はその番号が含まれているすべてのファイル名で、キー=>値の配列を作成します。

$final_results = []; 
while ($file = readdir($handler)) { 
    if ($file != "." && $file != "..") { 
     $regex = "/[\D]*[0-9]{3}-[0-9]{4}[\D]*/"; 
     if (preg_match_all($regex, $file, $results) > 0) { 
      if empty ($final_results[$results[0]]) { 
       $final_results[$results[0]] = $file ; 
      } else { 
       $final_results[results[0]] .= " ".$file ; 
      } 
     } 
    } 
} 
print_r ($final_results); 

あなたはこの配列を持ってたら、それはあなたが望むような1次元配列にそれを平らにする自明簡単です。

+0

ありがとうございました!どのように同じ配列の行に同じ電話番号で結果を持つことができますか? – Vlad

+0

更新された回答。私はコードをテストしなかったが、アウトラインは正しい。この答えがあなたのために働くならば、受け入れられたようにチェックしてください、ありがとう! –

+0

すべて私によく見えますが、私はHTTPエラー500を取得します – Vlad

関連する問題