2013-10-15 4 views
4

PHP의 json_decode 함수에는 "깊이"매개 변수가 있습니다.이 매개 변수를 사용하여 누가 다시 발생하는지 깊이 지정할 수 있습니다. 그러나 다음 코드 : 내가 기대하는 것은 "이름"과 "DOB"과를 보여 2의 깊이를 보여주는 하나의 깊이가PHP의 json_decode 깊이 매개 변수가 작동하지 않음

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

) 

입니다 :

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)); 
} 

이 출력을 생성합니다 부모님들. 나는 왜 1이나 2의 깊이가 전혀 표시되지 않는지 모르겠다.

아무도 내가 이해하지 못하는 것을 설명 할 수 있습니까?

답변

7

The documentation의 이유는 무엇입니까? json으로 디코딩 할 수 없거나

NULL이 반환된다 부호화 데이터는 재귀 제한보다 깊은 경우.

3

문제는 여기 당신이 depth 매개 변수를 이해하지 못했다이다 올바르게

당신의 test 배열의 깊이가 3이고 그래서 처음 두 반복 인쇄되지 않을 것이며 null 값이 반환된다

하지만 3 번째 반복에서는 깊이가 $depth [즉 3]

1

@Explosion Pills 대답 외에도 json_decodejson_encode으로 작동해야합니다.

이제 설명서에 따라 배열/개체를 인코딩하기 위해 사용자가 직접 제한을 지정할 수 있습니다. 이는 단순히 지정된 레벨보다 더 깊게 건너 뛸 수 있음을 의미합니다.

의 경우는 다릅니다. 전체 JSON 문자열을 구문 분석하려고합니다. 전체 문자열을 구문 분석하지 않고 더 이상 멈추지 않고 더 깊은 부분을 건너 뛸 수 있기 때문입니다. 이것이 심도 한계로 인해이 경우 함수가 NULL을 반환하는 이유입니다.

json_encode은 데이터 구조가 이미 메모리에 정의되어 있으므로 더 깊은 부분을 중지하고 건너 뛸 수 있습니다.

json_encode의 경우 $depth이 PHP 버전 5.5.0 (에는 5.3.0부터 있음)에 추가되었습니다. 변경 내역 here을 확인하십시오.

관련 문제