的问题可能是你的!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事情