Отсутствует значение в ассоциативном массиве, но значение отображается с помощью var_dump () - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть простой ассоциативный массив с именем $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"
}

Но когда я пытаюсь получить значение sku с помощью var_dump($product['sku']) он возвращает ноль?

var_dump($product['sku']);

возвращает

NULL

Я заметил, что в * 1019, похоже, произошел разрыв строки*, но я не уверен, что является причиной или связано ли это с моей проблемой.

Ответы [ 2 ]

1 голос
/ 04 апреля 2019

php не печатает разрывы строк в ключах с помощью var_dump, они становятся пробелами, но все еще находятся в методе доступа на разрыв строки.Этот код:

$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

работает как ключи массива сравниваются как биты (я думаю).

0 голосов
/ 04 апреля 2019

решаемые

Как подсказал @aynber, я попытался сделать var_dump(array_keys($product));, который вернул это:

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 ключа массива неверна.

Массив создается из CVS, на что указывает @Nigel Ren. После преобразования из UTF-8-BOM в UTF-8 возвращается ожидаемое значение.

var_dump($product['sku']); возвращает string(9) "001R00610"

...