带有值的PHP数组返回NULL

时间:2015-05-15 00:15:04

标签: php arrays csv

我有一个从CSV文件转换而来的数组。我有两个密钥ID和NAME。

如果我显示关键名称,一切正常。但是当我试图获取密钥ID时,我总是得到NULL,但密钥ID已经设置了值。

enter image description here

function convertCsvToArray($filename='', $delimiter=';')
{
  if(!file_exists($filename))
    return FALSE;

  $header = NULL;
  $data = array();
  if (($handle = fopen($filename, 'r')) !== FALSE)
  {
    while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
    {
      if(!$header)
        $header = $row;
      else
        $data[] = array_combine($header, $row);
    }
    fclose($handle);
  }
  return $data;
}

$array = convertCsvToArray('/path/to/csv/categories.csv',';');

/*
$array structure is
  array(2){
    ["ID"] => 3
    ["NAME"] => Some name
  }
*/
foreach($array as $category){
  var_dump($category["ID"]); //return NULL
  var_dump($category["NAME"]); //return "Some name"
}

CSV转储

ID;NAME
3;Značkové nealko nápoje
4;Nízkoenergetické nápoje
5;Minerálne vody, sóda
6;Tetrapack 0.2l a 0.5l

print_r for $ array

Array
(
    [0] => Array
        (
            [ID] => 3
            [NAME] => Značkové nealko nápoje
        )

    [1] => Array
        (
            [ID] => 4
            [NAME] => Nízkoenergetické nápoje
        )
)

print_r for $ category

Array
(
    [ID] => 3
    [NAME] => Značkové nealko nápoje
)

1 个答案:

答案 0 :(得分:5)

此处的问题来自BOM

在文件的开头添加了不可见的字符,因此它们以“ID”键为前缀,因此PHP无法找到ID键,并显示NULL值。

将您的CSV文件转换为没有BOM的UTF-8,它将解决您的问题。