Проблема заключается в преобразовании объекта в массив.
$a = (array)json_decode('{"10":"hi","test20":"howdy"}');
var_dump($a);
//outputs
array(2) {
["10"]=>
string(2) "hi"
["test20"]=>
string(5) "howdy"
}
Посмотрите, как этот массив имеет индекс "10"
? Но в PHP все, что выглядит как число, преобразуется в число, особенно в индексах массива. Вы не можете просто получить a["10"]
, потому что он конвертирует "10"
в число, и у этого массива нет такого индекса.
Однако foreach
работает.
foreach ($a as $key => $value) {
var_dump($key);
var_dump($value);
}
//outputs
string(2) "10"
string(2) "hi"
string(6) "test20"
string(5) "howdy"
Вы также можете рассматривать результат json_decode как объект. Пока вы не сможете сделать $a->10
или $a->"10"
,
$a = json_decode('{"10":"hi","test20":"howdy"}');
$b = 10;
var_dump($a->$b);
//outputs
string(2) "hi"
работает.
Но, скорее всего, как сказал Крис, вы просто хотите передать true
в качестве второго аргумента.
$a = json_decode('{"10":"hi","test20":"howdy"}', true);
var_dump($a[10]);
//outputs
string(2) "hi"