2011-02-07 7 views
3

PHPを使用してテキストファイルの行番号を取得する必要があります。私が必要としているのは、 "このラインを欲しい"です。テキストファイルに一致する行番号を取得する必要があります

file()を使用してファイル行を配列に配置し、array_search()を使用して検索しましたが、行番号は返されませんでした。この例では、行番号として3を返す必要があります。

$file = file("file.txt"); 
$key = array_search("WANT", $file); 
echo $key; 

テキストファイル:

First Line of Code 
Some Other Line 
WANT THIS LINE 
Last Line 
+0

これは 'array_search'の仕組みではありません。応答のために 'array_search(" WANT THIS LINE "、$ file);' – meagar

答えて

5

array_search()は、完全一致を探しています。あなたは、あなただけの部品を検索したい場合はこれが配列

foreach (new SplFileObject('filename.txt') as $lineNumber => $lineContent) { 
    if(trim($lineContent) === 'WANT THIS LINE') { 
     echo $lineNumber; // zero-based 
     break; 
    } 
} 

にファイルをロードするよりも多くのメモリ効率的でなければなりません

$key = 'WANT'; 
$found = false; 
foreach ($file as $lineNumber => $line) { 
    if (strpos($line,$key) !== false) { 
     $found = true; 
     $lineNumber++; 
     break; 
    } 
} 
if ($found) { 
    echo "Found at line $lineNumber"; 
} 
+0

が必要です。私は取得しています:警告:foreach()の引数が無効です。私は最初の行に$ fileの値を入れます – SomeRandomDude

+0

ファイルを$ fileに正しく読み込んでいますか? $ fileをテストしてください!== false befor ethe loop ...もしfalseならば、正しく読み取られていません。 –

+0

ああ、$ file = file()に戻すのを忘れました。 $ lineをecho $ lineNumberに変更する必要もあります。再度、感謝します! – SomeRandomDude

3

部分一致を探し配列エントリをループする必要があります単語の、

if (FALSE !== strpos($lineContent, 'WANT')) { 

if(trim($lineContent) === 'WANT THIS LINE') { 

を交換

+1

ありがとうございます。これは上記の解決策よりはるかに優れています。 –

関連する問題