Параметр глубины PHP json_decode не работает

Функция json_decode у PHP имеет параметр «глубина», где вы можете указать, кто глубоко его рекурсирует. Но следующий код:

test = array( 'name' => 'sean', 'dob' => '12-20', 'parents' => array( 'father' => 'tommy', 'mother' => 'darcy' ) ); foreach(range(1, 3) as $depth) { echo "-----------------\n depth: $depth\n"; print_r(json_decode(json_encode($test), true, $depth)); } 

Производит этот вывод:

 ----------------- depth: 1 ----------------- depth: 2 ----------------- depth: 3 Array ( [name] => sean [dob] => 12-20 [parents] => Array ( [father] => tommy [mother] => darcy ) ) 

То, что я ожидаю, – это глубина 1, чтобы показать «имя» и «доб», а также глубину 2, чтобы показать родителям. Я не понимаю, почему глубина 1 или 2 ничего не отображает.

Может ли кто-нибудь объяснить мне, что я не понимаю?

Solutions Collecting From Web of "Параметр глубины PHP json_decode не работает"

В документации говорится, почему.

NULL возвращается, если json не может быть декодирован или если кодированные данные глубже, чем предел рекурсии .

проблема в том, что вы не поняли параметр depth правильно

глубина test массива равна 3, и поэтому он не будет напечатан в первых двух итерациях и возвращается значение null

но на третьей итерации он печатается, потому что его глубина равна $depth [т.е. 3]

В дополнение к ответам @Explosion Pills вы ожидаете, что json_decode будет работать как json_encode .

Согласно документации вы можете указать свой лимит, чтобы закодировать массивы / объекты. Это просто означает, что он будет пропускать глубже указанного уровня.

Для json_decode это другое – он всегда пытается разобрать целую строку JSON, потому что она просто не может остановиться и пропустить более глубокие части без разбора всей строки. Вот почему предел глубины заставляет функцию возвращать NULL в этом случае.

json_encode может останавливаться и пропускать более глубокие части, поскольку структура данных уже определена в памяти.

Обратите внимание, что для PHP версии 5.5.0 добавлена $depth для json_encodejson_decode с 5.3.0). Проверьте журнал изменений здесь .