我正在尝试将CSV字符串解析为PHP中的数组.CSV字符串具有以下属性:
Delimiter: ,
Enclosure: "
New line: \r\n
Run Code Online (Sandbox Code Playgroud)
示例内容:
"12345","Computers","Acer","4","Varta","5.93","1","0.04","27-05-2013"
"12346","Computers","Acer","5","Decra","5.94","1","0.04","27-05-2013"
Run Code Online (Sandbox Code Playgroud)
当我尝试解析它时:
$url = "http://www.url-to-feed.com";
$csv = file_get_contents($url);
$data = str_getcsv($csv);
var_dump($data);
Run Code Online (Sandbox Code Playgroud)
最后一个元素和一个元素串在一个字符串中:
[0]=> string(5) "12345"
...
[7]=> string(4) "0.04"
[8]=> string(19) "27-05-2013
"12346""
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?任何帮助,将不胜感激.
sar*_*jee 107
做这个:
$csvData = file_get_contents($fileName);
$lines = explode(PHP_EOL, $csvData);
$array = array();
foreach ($lines as $line) {
$array[] = str_getcsv($line);
}
print_r($array);
Run Code Online (Sandbox Code Playgroud)
它会给你一个像这样的输出:
Array
(
[0] => Array
(
[0] => 12345
[1] => Computers
[2] => Acer
[3] => 4
[4] => Varta
[5] => 5.93
[6] => 1
[7] => 0.04
[8] => 27-05-2013
)
[1] => Array
(
[0] => 12346
[1] => Computers
[2] => Acer
[3] => 5
[4] => Decra
[5] => 5.94
[6] => 1
[7] => 0.04
[8] => 27-05-2013
)
)
Run Code Online (Sandbox Code Playgroud)
我希望这可以提供一些帮助.
Gau*_*aui 37
方便的oneliner:
$csv = array_map('str_getcsv', file('data.csv'));
Run Code Online (Sandbox Code Playgroud)
iat*_*nut 22
你应该使用fgetcsv. 由于您无法将文件作为流导入,因为csv是变量,因此您应该使用php://temp或php://memory首先将字符串伪装成文件:
$fp = fopen("php://temp", 'r+');
fputs($fp, $csvText);
rewind($fp);
Run Code Online (Sandbox Code Playgroud)
然后使用fgetcsv就没问题了:
$csv = [];
while ( ($data = fgetcsv($fp) ) !== FALSE ) {
$csv[] = $data;
}
Run Code Online (Sandbox Code Playgroud)
$data 将是一个单个csv行的数组(可能包括换行符或逗号等),因为它应该是.
小智 7
我使用以下函数将csv字符串解析为关联数组
public function csvToArray($file) {
$rows = array();
$headers = array();
if (file_exists($file) && is_readable($file)) {
$handle = fopen($file, 'r');
while (!feof($handle)) {
$row = fgetcsv($handle, 10240, ',', '"');
if (empty($headers))
$headers = $row;
else if (is_array($row)) {
array_splice($row, count($headers));
$rows[] = array_combine($headers, $row);
}
}
fclose($handle);
} else {
throw new Exception($file . ' doesn`t exist or is not readable.');
}
return $rows;
}
Run Code Online (Sandbox Code Playgroud)
如果您的csv文件名是mycsv.csv,那么您将此函数称为:
$dataArray = csvToArray(mycsv.csv);
Run Code Online (Sandbox Code Playgroud)
您也可以在http://www.scriptville.in/parse-csv-data-to-array/中获取此脚本