phpで複数のファイルから正規表現に一致するデータの件数を取得する方法です。
getFileListメソッドでファイル一覧を取得しています。globを使うことでファイル形式を正規表現で指定することが可能です。
preg_match_allで正規表現に一致するデータが第3引数に指定してある$matchesに入ります。 この時、正規表現のマッチパターンが複数パターンになることを想定して連想配列になりますので、中身のデータを取り出す際にはforeachを2回分実行しています。
<?php $pattern= '/account\d{7}/'; $path= 'C:\home'; function getFileList($dir) { $files = glob(rtrim($dir, '/') . '/*.csv'); $list = array(); foreach ($files as $file) { if (is_file($file)) { $list[] = $file; } if (is_dir($file)) { $list = array_merge($list, getFileList($file)); } } return $list; } $array = array(); $list = getFileList($path); foreach ($list as $key => $value){ $contents = file_get_contents($value); preg_match_all($pattern,$contents,$matches); foreach ($matches as $key2 => $value2){ foreach ($value2 as $key3 => $value3){ if (!array_key_exists($value3, $array)) { $array[$value3] = 1; }else{ $array[$value3] = $array[$value3] + 1; } } } } asort($array); print_r($array) ;
ちなみにコマンドベースでPHPを実行してprintの結果をファイルに出力する場合、もちろんPHP内でファイル書き出し操作をしてもいいですが、以下のように渡すのが手っ取り早いです。
hoge.php > hoge.txt