![](/img/trans.png)
[英]How to change color from specific csv line to the end of the line with php
[英]from csv to array with end of line chars
使用此功能解析php im中的CSV文件:
private function _csvToArray($url, $delimiter=',')
{
$csvData = file_get_contents($url);
$lines = explode(PHP_EOL, $csvData);
$array = array();
foreach ($lines as $line) {
$array[] = str_getcsv($line, $delimiter);
}
return $array;
}
這里的問題是,如果CSV文件包含任何帶有行尾字符的字段,則我將使用EOL來確定行尾,這會導致錯誤。
例:
Product_Name, "Description"
Product_Name, "Description"
Product_Name, "Description"
Product_Name, "Description"
可以,但是如果我有這樣的東西:
Product_Name, "Description_line_1
Description_line_2"
Product_Name, "Description_line_1
Description_line_2"
Product_Name, "Description_line_1
Description_line_2"
腳本會失敗,有什么辦法可以改進腳本以考慮此問題,還是最好在調用sript之前使用正則表達式先修復CSV?
這樣的事情應該起作用(已經正確測試了代碼):
$csv = array_map('str_getcsv', file($url), ',', '"');
我周圍有一個舊代碼,曾經為我修復過一次。
$url = 'file.csv';
$csv = array();
$csvContents = file_get_contents($url);
$lines = explode('"'."\n", trim($csvContents));
foreach($lines as $lineNumber => $line) {
$csv[$lineNumber] = array();
$fields = explode(',', $line);
foreach($fields as $field) {
$csv[$lineNumber][] = ltrim(rtrim($field, '"'), '"');
}
}
如果您想自己保存對臨時文件的寫入,則可以使用內存流。
private function _csvToArray($url, $delimiter=',')
{
$fp = fopen('php://memory', 'r+');
fwrite($fp, file_get_contents($url));
fseek($fp, 0);
$array = array();
while ($row = fgetcsv($fp, 0, $delimiter)) {
$array[] = $row;
}
fclose($fp);
return $array;
}
如果字段數據在附件字符之間,則fgetcsv
可以處理字段中的EOL。
private function _csvToArray($url, $delimiter=',', $enclosure='"')
{
$handle = fopen($url, 'r');
$array = array();
while($row = fgetcsv($handle, 0, $delimiter, $enclosure))
{
$array[] = $row;
}
fclose($handle);
return $array;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.