2011-11-26 10 views
1

次のコードを実行すると、ファイルから行番号付きの行のリストが出力されます。PHPのfile()関数は、どこで行番号を取得しますか?

<?php 
$lines = file('C:\sm\lines.txt'); 
foreach ($lines as $line_num => $line) { 
    echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n"; 
} 
?> 

は、今私は、単純な1次元ベクトルになりfile()によって返された配列を想像するだろう、と私は私のループでLINE_NUM変数を維持する必要があります。ファイル内の各行に関連するペア$line_num => $lineが表示されます。

+0

は基本的にあなたが数値の配列を取得し、foreachのを使用することができる理由を知りたいのですか? –

答えて

6

fileは、ファイルポインタを反復し、ファイル内の各行を配列に追加するのと事実上同じです。行番号は取得できませんが、配列の通常の数値インデックスは取得できません。言い換えれば

fileは、これは当然の簡略化されて

function file($filename) 
{ 
    $fp = fopen($filename); 
    while (!eof($fp)) { 
     $lines[] = fgets($fp); 
    } 
    fclose($fp); 
    return $lines; 
} 

を行います。あなたは正確な詳細をお知りになりたい場合は、あなたが

foreach ($lines as $line_num => $line) { 

http://php.net/manual/en/control-structures.foreach.php

foreach (array_expression as $value) statementを確認を行うことができる理由については

で顔をしています
foreach (array_expression as $key => $value) statement

最初の形式は、array_expressionで指定された配列をループします。各反復で、現在の要素の値が$ valueに割り当てられ、内部配列ポインタが1つ進められます(次の反復では、次の要素が表示されます)。

第2の形式では、現在の要素のキーを各繰り返しで$ key変数に割り当てます。

1

これは行番号ではなく、配列内のエントリのインデックスです。この場合、そのfile()は、すべての行

1

のための新しいインデックスエントリが作成されるため、常に$lineNumber = $index + 1は、非連想配列が自動的に割り当てられます数値配列のキー、すなわち

array(
    0 => 'first item', 
    1 => 'second item, 
    ... 
    9 => 'tenth item', 
); 

だから、配列のキー風アップラインであることナンバーマイナス1。

0

今私は、単純な1 次元ベクトルだろう、と私はPHPの配列は、実際にある私の ループに

をLINE_NUM変数を維持しなければならない)の配列は、(ファイルによって返さ想像します注文したマップ:

http://uk.php.net/manual/en/language.types.array.php