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


How to read string line by line from an array

我有一个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函数,它也会返回数组。