2014-09-05 46 views
-1

我有一個製表符分隔文件,我解析,然後我需要解析結果數組。解析製表符分隔文件,然後結果數組

這是我如何解析文件:

$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] => [email protected] [2] => Date [3] => 01/01/1985) 

我如何解析呢?我正在嘗試以下,但它產生一個空白頁。

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

我很新的數組,但可以清楚地看到什麼都沒有引號引起來,我猜是造成了我的問題。在解析製表符分隔文件的過程中是否應該添加引號?如果是這樣如何?

回答

0

的問題可能是你的!feof使用:你檢查,如果你尚未到達文件的末尾,這很好,但你不檢查的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... 

最好的辦法是建立一個二維數組:

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

這是僞代碼,因爲你有的while循環可以簡化很多
爲什麼不使用the fgetcsv function自定義分隔符?

$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>,我認爲使用implode只是更有意義。

我不確信你的文件看起來像什麼,但最長行可能長於2048個字節,你可以採取的事實,即PHP可以處理0長度參數。如果長度爲零,則會讀取該行直到遇到EOL或EOF:

while ($line = fgetcsv($fh, 0, "\t")) 

這樣就可以正常工作了......

底線:
我認爲你正在尋找的線沿線的東西:

$fh = fopne('myFile.txt', 'r'); 
if (!$fh) 
    exit(1);//handle error 
$array = array(); 
$alternative = array(); 
while($line = fgetcsv($fh, 0, "\t")) 
{ 
    $array[] = $line; 
    //or if you simply want to echo: 
    $alternative[] = implode('<br>', $line); 
} 
//the short alternative 
echo implode('<br>', $alternative); 
//the long way: 
foreach ($array as $line) 
{ 
    echo implode('<br>',$line), '<br>'; 
} 

量都在ssame事情

相關問題