Официальный документ говорит:
Параметр функции json_decode (), JSON_OBJECT_AS_ARRAY, теперь используется
если второй параметр (assoc) равен NULL. Ранее,
JSON_OBJECT_AS_ARRAY всегда игнорировался.
Этот код (AFAIK) выполняет это изменение и условие:
<?php
$an_object = new StdClass();
$an_object->some_atrribute = "value 1";
$an_object->other_atrribute = "value 2";
//an object
print_r($an_object);
$encoded = json_encode($an_object);
//here (null is passed in the second parameter)
$output = json_decode($encoded,null,512);
//using 7.2 should be array, however it is an object
print_r($output);
//array
$output = json_decode($encoded,true);
print_r($output);
Однако только последний отпечаток печатает как массив.
Я что-то не так понимаю?
Проверить подпись функции:
mixed json_decode ( string $json [, bool $assoc = FALSE
[, int $depth = 512 [, int $options = 0 ]]] )
опции
Битовая маска опций декодирования JSON. В настоящее время есть два
поддерживаемые варианты. ПервыйJSON_BIGINT_AS_STRING
это позволяет
приведение больших чисел к строке вместо числа с плавающей запятой, которое используется по умолчанию.
Второй вариантJSON_OBJECT_AS_ARRAY
который имеет тот же эффект, что и
установкаassoc
вTRUE
.
Это означает, что вы можете установить четвертый параметр для JSON_OBJECT_AS_ARRAY
даже если вы не установили второй параметр для true
по какой-то причине, но установите его null
вместо. Но значение этого четвертого параметра по умолчанию равно 0, что означает отсутствие преобразования (из объекта в массив), если для второго параметра установлено значение null
,
Вот сокращенное демо показывая разницу:
$an_object = new StdClass();
$an_object->attr = 'value';
$encoded = json_encode($an_object);
print_r( json_decode($encoded, true, 512, JSON_OBJECT_AS_ARRAY) );
print_r( json_decode($encoded, false, 512, JSON_OBJECT_AS_ARRAY) );
print_r( json_decode($encoded, null, 512, JSON_OBJECT_AS_ARRAY) );
Здесь вы увидите массив и объект, напечатанные как результат первого и второго операций декодирования во всех версиях PHP. Но третья операция приведет к массиву только начиная с PHP 7.2.0.
Других решений пока нет …