Почему json_decode без связи работает на PHP 5.6 и PHP 7.2 [duplicate]

Простое однострочное решение, просто сравните его с массивом, заполненным первой записью.

if(arr.join('') === Array(arr.length).fill(arr[0]).join(''))
4
задан Gino Pane 22 January 2018 в 12:19
поделиться

3 ответа

Как представляется, это связано с ошибкой # 61655 , зафиксированной в 7.2.0:

в поиске свойств объекта по имени всегда в строке, но в массиве числовых строка (например, «22200») преобразуется в числовую, но не в строку. когда преобразование внутреннего HashTable не изменилось, поэтому после преобразования поиск ключа завершится неудачно.

Уточнено: $a["2000"] всегда интерпретируется как $a[2000], но (array) не удалось передать строку объекта ключи к номерам. Таким образом, массив содержал строковые числовые индексы, но синтаксис массива «автоматическое кастинг» не позволял им быть доступными.

3
ответ дан deceze 16 August 2018 в 11:26
поделиться
  • 1
    В самом деле! Спасибо, я искал что-то, относящееся к & quot; json_decode & quot ;, а не к родовому типу. – Gino Pane 22 January 2018 в 12:09
  • 2
    @GinoPane, я буду рекомендовать вам всегда использовать true, когда вам понадобится литье типов. Проверьте, как мой ответ, как две разные версии, работают отлично. – Alive to Die 22 January 2018 в 12:10
  • 3
    @AlivetoDie, спасибо! Фактически, я его использую (вы можете проверить мою демонстрационную ссылку и посмотреть тестовый файл с переданным true). Причина вопроса заключалась в том, что я столкнулся с json_decode использованием без второго параметра и не мог объяснить магию с помощью индексов массива. – Gino Pane 22 January 2018 в 12:15

добавить TRUE в json_decode()

<?php
$a = json_decode('{"7":"value1","8":"value2","9":"value3","13":"value4"}',TRUE);

var_export($a);

var_dump(isset($a[7]), isset($a['7']));

https://3v4l.org/YuF9B

0
ответ дан Alive to Die 16 August 2018 в 11:26
поделиться

Добавить TRUE в json_decode () возможно, но он будет обрабатывать все.

Вам нужно изменить доступ к переменным.

, если ваш json выглядит это:

$return = '{"status":"ok","message":"","code":"200","data":{"1234":{"sid":1,"name":"foo"},"4321":{"sid":2,"name":"bar"}}}';

on:

$json_data = json_decode($return, true);
$data = $json_data['data'];

вы можете закодировать данные $ и получить доступ к значениям в виде массива: $ data [0] ['name']. ..

on:

$json_data = json_decode($return);
$data = (array) $json_data->data;

вы можете закодировать $ data и получить доступ к значениям как объекты: $ data [0] -> name ...

0
ответ дан Andreas 16 August 2018 в 11:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: