2014-02-25 3 views
0

json_decode()에 의해 생성 된 다차원 배열이 있습니다. json은 동적으로 생성됩니다. 즉, 일부 키가 임의로 존재 함을 의미합니다.배열 키가 있는지 확인

내가 정의되지 않은 인덱스를 피하기 위해 싶습니다 통지를, 그래서이 같은 함수에서 배열에 호출을 캡슐화 :

function exists($value) { 
    if (isset($value)) { 
     return $value; 
    } 
} 

그때 전화 데이터 :

$something = exists($json_array['foo']['bar']['baz']); 

그러나 나는 여전히 을 얻는다. 정의되지 않은 색인 : baz 고지. 어떤 제안?

+0

경우 (나 strlen ($ 값)> 0)' 때로는 배열이 설정되지 않았기 때문에 검정색으로 표시되지만 isset에서는 true를 반환합니다) –

+0

[런타임 "다차원 배열 키가 있는지 확인] 가능한 복제본 (http://stackoverflow.com/questions/6080991/) 실행시 점검 - 다차원 배열 키가 있음) –

답변

0

$json_array['foo']['bar']['baz']이 실패 인수로 전달할 때, 그것은 isset()에 전달되기 전에. 그것이 당신의 문제입니다.

2

PHP에 익숙하지 않은 것 같아서 평소보다 약간 긴 답변을드립니다.

$something = exists($json_array['foo']['bar']['baz']); 

이것은 당신이 쓴 것과 동일합니다 :

당신이다시피
$baz = $json_array['foo']['bar']['baz']; 
$something = exists($baz); 

이 그것이 exists()에 전달되기 전에 $json_array['foo']['bar']['baz'] 평가되는 것을 의미한다. 이것은 정의되지 않은 인덱스가 나오는 곳입니다.

올바른 관용구 더 같이 될 것이다 :

$something = NULL; 
if (isset($json_array['foo']['bar']['baz'])) { 
    $something = $json_array['foo']['bar']['baz']; 
} 

다음은 위의 라인도 동일하다 : 나는`선택

$something = isset($json_array['foo']['bar']['baz']) 
    ? $json_array['foo']['bar']['baz'] 
    : NULL; 
관련 문제