我有以下csv:
title; title2; title3
测试;文本;文本2
TEST1;文本1;文字3
我想将它转换为关联数组,如:
[0]
title => test,
title2 => text
title3 => text2
[1]
title => test1,
title2 => text1
title3 => text3
我试过:
$array = $fields = array(); $i = 0;
$handle = @fopen("file", "r");
if ($handle) {
while (($row = fgetcsv($handle, ";")) !== false) {
if (empty($fields)) {
$fields = $row;
continue;
}
foreach ($row as $k=>$value) {
$array[$i][$fields[$k]] = $value;
}
$i++;
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
感谢
答案 0 :(得分:1)
首先,不要使用fpoen,fgetcsv,fclose你可以简单地使用file
函数,它将你的文件作为一个数组返回,如果你处理的是小文件,而不是一个大的csv文件,如果使用fopen会更好。
然后您可以将其组合如下:
$csvFile = file('file.csv');
// 1 - get the first element of our array
// 2 - shift it
// 3 - parse it to an array using str_getcsv
$keys = str_getcsv(array_shift($csvFile), ';');
foreach ($csvFile as $csvRecord) {
// combine our $csvRecord with $keys array
$csv[] = array_combine($keys, str_getcsv($csvRecord, ';'));
}
print_r($csv);
答案 1 :(得分:0)
在黑暗中拍摄:(尚未测试过)
尝试以下:
$array = $fields = array();
$first_array = array();
$i = 0;
if (($handle = fopen("filename", "r")) !== FALSE) {
while (($data = fgetcsv($handle, ";")) !== FALSE) {
if (empty($data)) {
continue;
}
foreach ($data as $k=>$value) {
if($i==0)
{
$first_array[$k] = $value;
}
else if(!empty($first_array))
{
$array[$i][$first_array[$k]] = $value;
}
}
$i++;
}
fclose($handle);
}