的問題可能是你的!feof
使用:你檢查,如果你尚未到達文件的末尾,這很好,但你不檢查的fgets
返回值。文件中的最後一行通常只是一個換行符,因此在最後一次迭代中,$line
最終不會是空字符串。
您也正在重新指定$array
,每次更換您分配給它的先前值。如果您發佈的環位於外while
循環,這不是不可能的,你在做什麼其實是這樣的:
$line = '';//as explained, $line might be an empty string
$array = str_getcsv($line, "\t");//which is $array = array();
如果然後嘗試羅布泊在這個空數組,你不要呼應東西:
foreach (array() as $a)
echo $a;//there are no values to echo...
最好的辦法是建立一個二維數組:
$array = array();
while(...)
$array[] = $lineAsArray;
這是僞代碼,因爲你有的while循環可以簡化很多:
爲什麼不使用the fgetcsv
function自定義分隔符?
$fh = fopen('myFile.txt', 'r');
if (!$fh)
exit(1);//handle error
while ($line = fgetcsv($fh, 2048, "\t"))
{//line is an array of CSV values now
echo implode('<br>', $line), '<br>';//echo all values
}
這就是它的全部。而不是implode
你可以循環線,但看到你只是迴應所有的價值觀,其次是<br>
,我認爲使用implode
只是更有意義。
我不確信你的文件看起來像什麼,但最長行可能長於2048個字節,你可以採取的事實,即PHP可以處理0
長度參數。如果長度爲零,則會讀取該行直到遇到EOL或EOF:
while ($line = fgetcsv($fh, 0, "\t"))
這樣就可以正常工作了......
底線:
我認爲你正在尋找的線沿線的東西:
$fh = fopne('myFile.txt', 'r');
if (!$fh)
exit(1);//handle error
$array = array();
$alternative = array();
while($line = fgetcsv($fh, 0, "\t"))
{
$array[] = $line;
//or if you simply want to echo:
$alternative[] = implode('<br>', $line);
}
//the short alternative
echo implode('<br>', $alternative);
//the long way:
foreach ($array as $line)
{
echo implode('<br>',$line), '<br>';
}
量都在ssame事情