0

その行の特定の変数に応じて、テキストファイルの特定の行をカウントする方法。

たとえば、$item1や$item2などを含むテキストファイルの行数を数える必要があります。

4

3 に答える 3

2

grep -cシェルで行うようなことが必要なようです。次のようなことを試してください。

$item1 = 'match me';
$item2 = 'match me too';

// Thanks to @Baba for the suggestion:
$match_count = count(
    preg_grep(
         '/'.preg_quote($item1).'|'.preg_quote($item2).'/i',
         file('somefile_input.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)
    )
);

// does the same without creating a second array with the matches
$match_count = array_reduce(
    file('somefile_input.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES),
    function($match_count, $line) use ($item1, $item2) {  
        return 
            preg_match('/'.preg_quote($item1).'|'.preg_quote($item2).'/i', $line) ?
            $match_count + 1 : $match_count;
    }
);

上記のコード サンプルでは、​​file()関数を使用してファイルを配列 (行ごとに分割) に読み込み、array_reduce()を使用してその配列を反復し、反復内でpreg_match()を使用して行が一致するかどうかを確認します (/i末尾の大文字小文字を区別しません)。

foreach も使用できます。

于 2013-01-14T09:16:06.740 に答える
1

このコードは、 orfile.phpを含む行のみを読み取り、カウントします。チェックしたい単語ごとに新しいものを追加する必要があるため、チェック自体を微調整できます。'$item1''$item2'stristr()

<?php

$file = 'file.php';

$fp = fopen($file, 'r');
$size = filesize($file);
$content = fread($fp, $size);

$lines = preg_split('/\n/', $content);

$count = 0;
foreach($lines as $line) {
    if(stristr($line, '$item1') || stristr($line, '$item2')) {
        $count++;
    }
}
echo $count;
于 2013-01-14T09:15:46.470 に答える
1

ファイルを 1 行ずつ読み取り、strpos を使用して、行に特定の文字列/アイテムが含まれているかどうかを判断します。

$handle = fopen ("filename", "r");
$counter = 0;
while (!feof($handle))
{
  $line = fgets($handle);
  // or $item2, $item3, etc.
  $pos = strpos($line, $item);
  if ($pos !== false)
  {
    $counter++
  }
}
fclose ($handle);
于 2013-01-14T09:15:52.563 に答える