Итак, я только что наткнулся на эту проблему с преобразованием массива в JSON и обратно в массив. Я использовал функцию для хранения массива в базе данных.
Код:
$array = array(
1 => 'first',
'200' => 'second'
);
$array = json_encode($array);
$array = json_decode($array);
$array = (array)$array;
echo "<pre>"; var_dump($array);
var_dump(array_key_exists(1, $array));
var_dump(array_key_exists(200, $array));
var_dump(array_key_exists('1', $array));
var_dump(array_key_exists('200', $array));
Выход:
array(2) {
["1"]=>
string(5) "first"
["200"]=>
string(6) "second"
}
bool(false)
bool(false)
bool(false)
bool(false)
Любое объяснение? Решение? Спасибо?
@PaulCrovella, значит, в предыдущей версии нет обходного пути? Я работаю над этим древним веб-сайтом и все испорчу, если обновлю версию PHP только для этого. :)
Это лишь одна из многих причин обновить используемую вами версию PHP.
Вместо того
$array = json_encode($array);
$array = json_decode($array);
$array = (array)$array;
вам нужно только добавить параметр для преобразования в массив в json_decode
$encoded_array = json_encode($array);
$array = json_decode($encoded_array, true);
См. Документацию по json_decode()
в http://php.net/manual/en/function.json-decode.php
Как перчатка! (не уверен, правильно ли я использую это выражение). Спасибо
Обновите до 7.2. См. wiki.php.net/rfc/convert_numeric_keys_in_object_array_casts.