如何从数组中逐行读取字符串

时间:2013-12-09 10:49:16

标签: php arrays

我有一系列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%
----  ----------------  ------  ------  ------  ------  ------  --------  ------  --------  --------  ------  -----  ------  ------

2 个答案:

答案 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函数,它也将返回数组。