Проверьте подпись функции :
mixed json_decode ( string $json [, bool $assoc = FALSE
[, int $depth = 512 [, int $options = 0 ]]] )
options
Параметры битовой маски JSON-декодирования.В настоящее время есть два поддерживаемых варианта.Первый - JSON_BIGINT_AS_STRING
, который позволяет приводить большие целые числа к строке вместо значений с плавающей запятой, что является значением по умолчанию.Второй параметр - JSON_OBJECT_AS_ARRAY
, который имеет такой же эффект, как установка assoc
на TRUE
.
Это означает, что вы можете установить четвертый параметр на JSON_OBJECT_AS_ARRAY
, даже если вы по какой-то причине не установили параметр second на 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.