2013-03-08 19 views
1

我有一個小問題轉換csv文件,未定義的轉換CSV PHP

文件被轉換偏移,但越來越通知書

注意:未定義抵消:2 注意:未定義抵消: 4 in

另外我需要按$ row排序[2]這可能嗎?

<?php 

$tsvFile = new SplFileObject('file.csv'); 
$tsvFile->setFlags(SplFileObject::READ_CSV); 
$tsvFile->setCsvControl("\t"); 

$file = fopen('file2.csv', 'w'); 
$header = array('col1', 'col2'); 
fputcsv($file, $header, ',', '"'); 

foreach ($tsvFile as $line => $row) { 
    if($line > 0) { 
     fputcsv($file, array($row[2], $row[4]), ',', '"'); 
    } 
} 
fclose($file); 

?> 

任何幫助表示讚賞。

+0

['isset()'](http://php.net/manual/en/function.isset.php)通常是您在引用可能未設置的數組偏移量時需要的。選項卡上的爆炸可能會在某些行上變得枯燥......缺少選項卡或不是。 – ficuscr 2013-03-08 16:50:48

+0

你能解釋一下嗎?,謝謝 – Dario 2013-03-08 16:54:29

回答

1

如果某些行在分隔時有4個值(列),但其他人只有1個值,該怎麼辦?你的代碼假設有一個固定數量的$ row []元素。如果你做isset($row[2]),它返回false,那麼你知道你不應該嘗試訪問它,這是通知的原因。

至於爲什麼沒有賦值給該偏移量,我不能說沒有看到CSV。我發現逗號比製表符更適合分隔符 - 也許你也可以:)

不完全確定我知道'group by'是什麼意思。您可以輕鬆地在foreach中添加運行總數,或者使用其中一個列作爲維度在另一個數組中保留一個計數,並將每個維度的總數作爲維度。

+0

我明白了,但這樣做並沒有改變通知。感謝分配 – Dario 2013-03-08 17:01:44

+0

也許嘗試['fgetcsv'](http://www.php.net/manual/en/function.fgetcsv.php)。或者調試'foreach($ tsvFile as $ line => $ row)''。使用'var_dump'是'$ line'和'$ row'你期望的是什麼?我猜不是。 – ficuscr 2013-03-08 17:04:15

+0

我現在看到爲什麼返回偏移量,是因爲在文件末尾是空行。 – Dario 2013-03-08 17:06:21