2012-06-07 3 views
1

나는 이와 같은 배열을가집니다.PHP의 in_array 함수는 항상 false를 반환합니다.

$flds = array("fn", "ln", "em"); 

다른 연관 배열이 있습니다. 이것은 JSON POST에서 동적으로 반환됩니다.

$ret = array("fn" => "xyz", "ln" => "abc", "em" => "s.2", "another" => "123") 

두 번째 배열에 첫 번째 배열이 있는지 검색하고 싶습니다. 나는이 한 : 그것은 항상 반환

if (in_array($flds, array_keys($ret))) 
     echo "exists"; 
    else 
     echo "does not"; 

"을하지 않습니다." 인쇄 할 때 $ flds와 array_keys ($ ret)는 모두 똑같이 보입니다.

여기에 문제가 있습니까?

답변

4

이 코드는 전체 $ flds 배열을 $ ret의 값으로 찾고 있습니다.

array_intersect()을 사용하고 결과의 길이를 확인하는 것이 좋습니다.

+0

. 더 쉽습니다. PHP에서 원했던 것처럼 간단한 검색이없는 이유가 궁금합니다. 어쨌든 고마워! –

1

in_array() 함수는 요소가 배열의 요소인지 여부를 검색합니다. 귀하의 경우, 첫 번째 배열이 두 번째 배열에있는 키의 하위 집합인지 여부를 확인하려고합니다. 나 작동하지 않는 어떤 작동하고 무엇을 보여주지 :이 일을했다

/* check if 'fn' is an array key key of $ret */ 
in_array('fn', array_keys($ret)) // true 

/* check if array('fn') is an element of array(array('fn'), 'en') */ 
in_array(array('fn'), array(array('fn'), 'en')) // true 

/* check if $flds is a key of $ret */ 
in_array($flds, array_keys($ret)) // false 

/* check if all elements of $flds are also keys of $ret */ 
array() === array_diff($flds, array_keys($ret)) // true 
+0

마지막으로 무엇을 반환합니까? $ flds가 $ ret에 존재하는지 여부를 어떻게 알 수 있습니까? 우리는 카운트를위한 다른 조건을 수행해야합니까? –

+0

마지막 것은 부울 비교입니다. 먼저'$ flds '에있는 모든 요소가'$ ret'의 키가 아닌 배열을 생성합니다. 그런 다음이 배열이 비어 있는지 확인합니다. – siimsoni

관련 문제