解析制表符分隔文件,然后生成数组

时间:2014-09-05 09:37:05

标签: php arrays parsing

我有一个以制表符分隔的文件,我正在解析,然后我需要解析生成的数组。

这就是我解析文件的方式:

$fp = fopen('myFile.txt', 'r');

while ( !feof($fp) )
{
  $line = fgets($fp, 2048);

  $delimiter = "\t";
  $array = str_getcsv($line, $delimiter);
} 

要检查数据,我尝试print_r($array);,例如:

Array ( [0] => Customer Name [1] => Customer Email [2] => Date [3] => Test Date)
Array ( [0] => John Smith [1] => john@gmail.com [2] => Date [3] => 01/01/1985)

我该如何解析这个?我尝试以下操作,但它会生成一个空白页。

foreach($array as $a) {
    echo $a.'<br>';
}

我对数组很新,但可以清楚地看到引号中没有任何内容,我猜这会引起我的问​​题。是否应在解析制表符分隔文件期间添加引号?如果是这样的话?

1 个答案:

答案 0 :(得分:0)

问题可能是你使用!feof:你正在检查你是否还没有到达文件的末尾,这很好,但你没有检查{{1的返回值}}。文件中的最后一行通常只是一个换行符,所以在最后一次迭代中,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...

这是伪代码,因为你的while循环可以简化很多
为什么不将the fgetcsv function与自定义分隔符一起使用?

$array = array();
while(...)
    $array[] = $lineAsArray;

这就是全部。而不是$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>更有意义。

我不确定您的文件是什么样的,但最长的行可能超过2048字节,您可以利用PHP可以处理{{1}的事实长度参数。如果长度为零,则将读取该行,直到遇到EOL或EOF:

implode

那会很好......

底线:
我认为你正在寻找类似的东西:

0

两者都等于ssame的事情