我有一系列text / html文件,其中的内容是定价表。
我希望逐行读取每一行,并将每个单元格处理成数据库。
我试过了,但它似乎没有给我我期待的结果:
$counter=1;
while( $line = explode(PHP_EOL, $attachment[$filename]) ) {
printStatus( "Line: " . $counter . " « " . $line );
$counter++;
}
我已经测试了数据,print $attachment[$filename]
按预期输出了文件
以上循环导致以下输出:
Line: 1 « Array
Line: 2 « Array
Line: 3 « Array
Line: 4 « Array
Line: 5 « Array
Line: 6 « Array
Line: 7 « Array
Line: 8 « Array
Line: 9 « Array
文件的前几行如下所示:
<!doctype html public "-//w3c//dtd html 4.0transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<pre>
<font face="courier new" size=-4>
13/11/13 Clocking Productivity Analysis 3619
22:46 Date Range: 01/11/13 To 13/11/13 Technician Only Page 1
Tech Name Open Clock Close Avail Sold Sold Cost Cost Labour Margin Docs Unprod Sold /
Rate WIP Hrs WIP Hrs Hrs Amt Hrs Amt Gross % Hrs Avail%
---- ---------------- ------ ------ ------ ------ ------ -------- ------ -------- -------- ------ ----- ------ ------
答案 0 :(得分:2)
while ($line = explode(PHP_EOL, $attachment[$filename]))
让我们分析一下:
explode
返回一个数组,因此$line
是一个数组,而不是数组的元素$line = explode(...)
条件时,while
会一次又一次地执行,这意味着在每次循环迭代中,您再次爆炸字符串并为$line
<分配新数组< / LI>
你要么:
$lines = explode(PHP_EOL, $attachment[$filename]);
while ($line = array_shift($lines))
或
foreach (explode(PHP_EOL, $attachment[$filename]) as $line)
答案 1 :(得分:1)
目前$line
是数组。如果要在$line
定义的$counter
中打印当前元素,请使用此:
echo $line[$counter];
或者使用file
函数,它也将返回数组。