2013-04-18 1 views
0

다차원 배열 (회색/흰색 목록)과 재귀 적으로 교차하려고 시도 할 때 현재 PHP Catchable fatal error: Argument 2 passed to NUI::recArrInterKey() must be an array, string given 오류가 발생합니다.PHP 재귀 배열 교차 키 문자열 값 위로 넘어 가기

내가 알아낼 수없는 이유로 어떤 부분이 $foo['contact']['im']['provider'] 섹션에 걸려있는 것처럼 보입니까? 여기

내가

Array 
(
    [location] => false 
    [network_name] => false 
    [interests] => false 
    [last_name] => false 
    [url] => false 
    [significant_other] => false 
    [network_domains] => false 
    [contact] => Array 
     (
      [im] => Array 
       (
        [provider] => false 
       ) 

      [email_addresses] => false 
     ) 

) 

그리고

/** 
* Recursive array intersect key 
*/ 
private static function recArrInterKey(array $array1, array $array2) 
{ 
    $array1 = array_intersect_key($array1, $array2); 
    foreach ($array1 as $key => &$value) 
    { 
     if (is_array($value)) 
     { 
      $value = self::recArrInterKey($value, $array2[$key]); 
     } 
    } 
    return $array1; 
} 

이 내가 기대하고 $array1

Array 
(
    [location] => Seattle 
    [occupation] => Developer 
    [network_name] => foo.network 
    [network_region] => foo.region 
    [interests] => coding 
    [last_name] => daniel 
    [url] => false 
    [id] => 4665228 
    [significant_other] => some girl 
    [network_domains] => false 
    [contact] => Array 
     (
      [im] => Array 
       (
        [provider] => aol 
       ) 
      [phone] => Array 
       (
        [provider] => at&t 
       ) 

      [email_addresses] => [email protected] 
     ) 

) 

이라고 말할 수 있습니다 방법을 사용하고 예를 들어 화이트리스트 배열 ($ 배열 2)의 이것으로 돌아 가기

-
Array 
(
    [location] => Seattle 
    [occupation] => Developer 
    [network_name] => foo.network 
    [interests] => coding 
    [last_name] => daniel 
    [url] => false 
    [significant_other] => some girl 
    [network_domains] => false 
    [contact] => Array 
     (
      [im] => Array 
       (
        [provider] => aol 
       ) 
      [email_addresses] => [email protected] 
     ) 

) 
+0

먼저 배열을 확인하십시오. –

+1

잘 - 두 번째 매개 변수를 확인하지 마십시오 :'$ array2 [$ key]'- 이것은 배열이어야합니다. – Adidi

+0

아주 좋은 지적입니다. +1 – ehime

답변

2

잘 당신은 두 번째 매개 변수를 확인 해달라고 : $array2[$key] - 당신이 =>$array1[$key]가 배열로 값을 가지고 있지만 필요하지 않을 수도 있습니다, 그것은 단지 키를 비교 array_intersect_key을 사용하고 있기 때문에이 또한 배열

+0

건배, 지적 해 주셔서 고맙습니다. 그것의 보통 작은 물건 =/ – ehime

+0

문제 없음 ^^. 나를 표시하는 노력에 감사드립니다 :) – Adidi

3

해야을 $array2[$key]

,691 : recArrInterKey($a1, $a2)recArrInterKey($a2, $a1)

이 수정을 시도 동일하지 않습니다 :

당신의 경우는 한 방향이 교차하다

private static function recArrInterKey(array $array1, array $array2) 
{ 
    $array1 = array_intersect_key($array1, $array2); 
    foreach ($array1 as $key => &$value) 
    { 
     if (is_array($value)) 
     { 
      $value = is_array($array2[$key]) ? self::recArrInterKey($value, $array2[$key]) : $value; 
     } 
    } 
    return $array1; 
} 
+0

+1 좋은 응답. – ehime