将csv解析为关联数组php;分隔符

时间:2017-04-10 07:18:27

标签: php csv

我有以下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);
}

感谢

2 个答案:

答案 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);
}