我有一个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%
---- ---------------- ------ ------ ------ ------ ------ -------- ------ -------- -------- ------ ----- ------ ------
while ($line = explode(PHP_EOL, $attachment[$filename]))
让我们来分析一下:
explode
返回一个数组,所以$line
是一个数组而不是数组的元素- 每次计算
while
条件时,$line = explode(...)
都会被一次又一次地执行,这意味着在每次循环迭代中,您都会再次分解字符串并为$line
分配一个新数组
你要么想要:
$lines = explode(PHP_EOL, $attachment[$filename]);
while ($line = array_shift($lines))
或
foreach (explode(PHP_EOL, $attachment[$filename]) as $line)
当前$line
是数组。如果要打印$counter
定义的$line
中的当前元素,请使用以下方法:
echo $line[$counter];
或者使用file
函数,它也会返回数组。