1 回答

TA貢獻1872條經驗 獲得超4個贊
正如您將在以下解決方案中看到的那樣,這是一個非常好的問題。
這是 csv 文件的一個常見缺陷,即在使用 PHP 的內置 csv-to-array 函數(例如 fgetcsv)時,末尾的冗余行終止符實際上會導致寫入一個空數組,這些函數非?;?,不考慮這些事情。
來自array_combine的 PHP 手冊:
5.4.0 以前的版本發出 E_WARNING 并為空數組返回 FALSE。
這與編譯數組的整個 foreach 循環只返回一次錯誤這一事實相吻合,因為 csv 文件的末尾只有一個空數組。它還解釋了為什么array_combined
除了最后一個元素案例之外的所有案例實際上都成功了。
看到最后一個數組是空的:
...
[8405] => Array
(
[No_] => II38392
[Manufacturer ID] => 7XB7A00034
[Description] => LEN HDD SAS-1TB-7XB7A00034
[LQ Price] => 336.00000000000000000000
[Retail Price Incl_ GST] => 480.48000000000000000000
[AvailableQty] => 0.00000000000000000000
[Rocklea] =>
[Sydney] =>
[Net Weight] => 0.50000000000000000000
[Item Category Code] => LEN
[Product Group Code] => HDD
[Minor Category 1] => HDD-2.5
[Minor Category 2] => HDD-ENT
[Vendor Name] => Lenovo
[Vendor URL] =>
[Item URL] =>
[Warranty] => 3 Years
[Dimension] =>
[Description1] => Lenovo 7XB7A00034, ThinkSystem 2.5" 1TB 7.2K SAS 12Gb Hot Swap 512n HDD, 3 Years
[Image] => https://auscompcomputers.com/uploads/image/LEN-HDD-SAS-1TB-7XB7A00034.jpg
)
[8406] =>
)
解決方案 - 在將文件傳遞給任何其他函數之前先處理文件:
function remove_last_n($csv_input){
//remove the very last newline to prevent a 0-field array for the last line
$str = file_get_contents($csv_input);
$str = preg_replace('/\n$/', '', $str);
file_put_contents("$csv_input",$str);
}
remove_last_n('whatever_file.csv');
- 1 回答
- 0 關注
- 138 瀏覽
添加回答
舉報