我的csv值如下所示:
$csv_data = "test,this,thing
hi,there,this
is,cool,dude
have,fun";
我想把整个CSV字符串读入一个多维数组,这样我就可以得到:
array(
array(
'test' => 'hi',
'this' => 'there',
'thing' => 'this'
),
array(
'test' => 'is',
'this' => 'cool',
'thing' => 'dude'
),
array(
'test' => 'have',
'this' => 'fun',
'thing' => ''
)
);
我想要这样的输出,请注意CSV值是动态的。
发布于 2011-12-02 16:04:02
假设CSV数据中的每一行都有相同的列数,这应该是可行的。
$lines = explode("\n", $csv_data);
$head = str_getcsv(array_shift($lines));
$array = array();
foreach ($lines as $line) {
$array[] = array_combine($head, str_getcsv($line));
}
如果行的列数是可变的(如您的示例所示,其中最后一行有2列而不是3列),请使用以下循环:
foreach ($lines as $line) {
$row = array_pad(str_getcsv($line), count($head), '');
$array[] = array_combine($head, $row);
}
发布于 2011-12-02 16:11:20
这是一个非常干净和简单的解决方案:
function parse_row($row) {
return array_map('trim', explode(',', $row));
}
$rows = str_getcsv($csv_data, "\n");
$keys = parse_row(array_shift($rows));
$result = array();
foreach ($rows as $row) {
$row = parse_row($row);
$row = array_pad($row, 3, NULL);
$result[] = array_combine($keys, $row);
}
https://stackoverflow.com/questions/8353203
复制相似问题