CSV 到关联数组

2022-08-30 09:54:51

我已经看到了许多关于如何获取CSV文件,然后创建一个以标头作为键的关联数组的示例。

例如:

Brand,Model,Part,Test
Honda,Civic,123,244
Honda,Civic,135,434
Toyota,Supra,511,664

它将创建一个数组的位置,例如品牌,模型,部件,测试的位置。Array[$num][$key]$key

因此,如果我想访问测试值“434”,我必须循环数组中的每个索引,然后忽略任何不是本田的品牌,以及任何不是思域的型号。


我需要做的是最直接地访问值,而不是通过 for 循环遍历每个$num索引。我希望能够通过以下方式访问值测试“434”

Array['Honda']['Civic']['135']

或者通过循环遍历本田的每个型号来控制for语句...类似的东西

foreach $model in Array['Honda']

至少我需要能够浏览给定已知品牌的每个模型,并访问每个模型的所有相关信息。

编辑:

只是为了确认我正在设置一个例子。我的实际数据有这样的标头:

brand model part price shipping description footnote

其中,我需要访问与零件相关的所有信息(价格,运输,描述,脚注)


答案 1

太多的长解决方案。我总是发现这是最简单的:

<?php
    /* Map Rows and Loop Through Them */
    $rows   = array_map('str_getcsv', file('file.csv'));
    $header = array_shift($rows);
    $csv    = array();
    foreach($rows as $row) {
        $csv[] = array_combine($header, $row);
    }
?>

答案 2

逐行运行 csv 文件,然后插入到数组中,如下所示:

$array = $fields = array(); $i = 0;
$handle = @fopen("file.csv", "r");
if ($handle) {
    while (($row = fgetcsv($handle, 4096)) !== 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);
}