Json кодирует и декодирует (строка) числовой индексированный массив

Итак, я только что наткнулся на эту проблему с преобразованием массива в 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)

Любое объяснение? Решение? Спасибо?

Обновите до 7.2. См. wiki.php.net/rfc/convert_numeric_keys_in_object_array_casts.

user3942918 26.10.2018 06:04

@PaulCrovella, значит, в предыдущей версии нет обходного пути? Я работаю над этим древним веб-сайтом и все испорчу, если обновлю версию PHP только для этого. :)

ACD 26.10.2018 06:06

Это лишь одна из многих причин обновить используемую вами версию PHP.

user3942918 26.10.2018 06:10
1
3
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо того

$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

Как перчатка! (не уверен, правильно ли я использую это выражение). Спасибо

ACD 26.10.2018 06:09

Другие вопросы по теме