关联数组中缺少值,但使用 var_dump() 可见值

Missing value in associative array, but value visible with var_dump()

我有一个名为 $product 的简单关联数组。

这是 var_dump[$product]

的样子
array(5) {
  ["sku"]=>
  string(9) "001R00610"
  ["name"]=>
  string(28) "Xerox 001R00610 Transfer Kit"
  ["image_label"]=>
  string(28) "Xerox 001R00610 Transfer Kit"
  ["small_image_label"]=>
  string(28) "Xerox 001R00610 Transfer Kit"
  ["thumbnail_label"]=>
  string(28) "Xerox 001R00610 Transfer Kit"
}

但是当我尝试使用 var_dump($product['sku']) 获取 sku 的值时 returns null?

var_dump($product['sku']);

returns

NULL

我注意到 sku 处似乎有一个换行符,但我不确定是什么原因造成的,或者这是否与我的问题有关。

php 不会在带有 var_dump 的键中打印换行符,它们变成 space 字符,但在访问器中仍然是换行符。此代码:

$obj = array("foo\r" => "bar");
var_dump($obj);

打印这个:

array(1) { ["foo "]=> string(3) "bar" }

并且无法通过此访问:

$obj["foo"]; //returns null
$obj["foo "]; //returns null

仅:

$obj["foo\n"] //returns bar

作为数组键作为位进行比较(我认为)。

已解决

正如@aynber 所建议的,我尝试做一个 var_dump(array_keys($product)); returned this:

array(5) {
  [0]=>
  string(6) "sku"
  [1]=>
  string(4) "name"
  [2]=>
  string(11) "image_label"
  [3]=>
  string(17) "small_image_label"
  [4]=>
  string(15) "thumbnail_label"
}

数组键 sku 的长度错误。

正如@Nigel Ren 所指出的,数组是从 CVS 创建的。从 UTF-8-BOM 转换为 UTF-8 后,它 return 预期值。

var_dump($product['sku']); returns string(9) "001R00610"