当从CSV解析时,php关联数组的第一个键返回未定义的索引

当从CSV解析时,php关联数组的第一个键返回未定义的索引,php,Php,从csv解析时,访问关联数组的第一个索引时遇到问题 CSV: PHP: 来自csv($csv)的函数关联数组 { $rows=array_map('str_getcsv',file($csv)); $header=数组移位($rows); $array=array(); foreach($行作为$数据){ $array[]=数组组合($header,$data); } 返回$array; } $colors=来自_csv($csv)的关联_数组_; 现在$colors返回: [ [ “ID”=

从csv解析时,访问关联数组的第一个索引时遇到问题

CSV:

PHP:

来自csv($csv)的函数关联数组 { $rows=array_map('str_getcsv',file($csv)); $header=数组移位($rows); $array=array(); foreach($行作为$数据){ $array[]=数组组合($header,$data); } 返回$array; } $colors=来自_csv($csv)的关联_数组_; 现在
$colors
返回:

[
[
“ID”=>“1”,
“颜色”=>“红色”,
],
[
“ID”=>“2”,
“颜色”=>“绿色”,
],
[
“ID”=>“3”,
“颜色”=>“蓝色”,
],
];
但是如果我尝试访问任何颜色的
ID

$colors[0][“ID”]//返回未定义的索引:ID
$colors[0][“COLOR”]//返回“Red”
如果我在颜色上循环,我可以访问
ID
,如下所示:

foreach($colors作为$color)
{ 
print_r(reset($color));//打印ID
}
但是为什么我不能像
$colors[0][“ID”]
那样直接访问它呢


谢谢,我也有同样的问题。问题是Excel在文档的第一个单元格中添加了一个隐藏字符,用于编码UTF-8 BOM

我在跑步时可以看到:

var_dump(json_encode($array));
这将返回:

string(312) "[{"\ufeffemail":"test@me.com","firstName":"import","lastName":"test"},{"\ufeffemail":"test@comcast.net","firstName":"import","lastName":"test"}]"
要删除\ufeff字符,我执行了以下操作:

$header = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $header);
在这种情况下,这将是:

function associative_array_from_csv($csv)
{
    $rows   = array_map('str_getcsv', file($csv));
    $header = array_shift($rows);
    $header = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $header);
    $array  = array();

    foreach($rows as $data) {
        $array[] = array_combine($header, $data);
    }

    return $array;
}

$color
还是
$colors
?对我有效:,请检查。尝试修剪数组键,其中可能有一些奇怪的字符。@AmrAly是
$colors
,我已更新了最后一行。
function associative_array_from_csv($csv)
{
    $rows   = array_map('str_getcsv', file($csv));
    $header = array_shift($rows);
    $header = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $header);
    $array  = array();

    foreach($rows as $data) {
        $array[] = array_combine($header, $data);
    }

    return $array;
}