2014-01-28 6 views
1

글쎄, 두통이있었습니다.배열에 다른 배열이 포함되어 있는지 확인하는 방법

두 개의 배열이 있습니다.

$array_1 = Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => 'john' 
      [age] => 30 
     ) 

[1] => Array 
     (
      [id] => 2 
      [name] => 'Amma' 
      [age] => 28 
     ) 

[2] => Array 
     (
      [id] => 3 
      [name] => 'Francis' 
      [age] => 29 
     ) 

) 

그리고

array_2 = = Array 
    (
     [0] => Array 
      (
       [id] => 2 
       [name] => 'Amma' 
      ) 

    ) 

가 어떻게 $array_2의 ID와 이름이 ID와 $array_1[1의 이름]과 $array_1[1]['age']를 반환과 동일한 지 알 수있는 또 다른 배열?

감사

+0

array_2에 값이 여러 개있을 수 있습니까? – ohmusama

+3

이것은 몇 가지 SQL 데이터처럼 보입니다. 아마도 조인이 좋은 옵션일까요? –

답변

3
foreach($array_1 as $id=>$arr) 
{ 
    if($arr["id"]==$array_2[0]["id"] AND $arr["name"]==$array_2[0]["name"]) 
    { 
     //Do your stuff here 
    } 
} 
+0

이전에는 그렇게 생각하지 않았으므로 훨씬 간단합니다. 그게 날 도와 줘, 고마워! –

+0

내 대답과 정확히 똑같다고 생각하지 않습니까? ;) –

+0

예 lol. 하지만 난 먼저 내 게시 : P – 131

1

난 당신이 알려진 idname을 가지고 사람의 나이를 찾으려면 가정합니다.

이 작동합니다 :

foreach ($array_1 as $val){ 
    if($val['id']==$array_2[0]['id'] && $val['name']==$array_1[0]['name']){ 
     $age = $val['age']; 
    } 
} 
echo $age; 
+0

무엇이 아래쪽 투표입니까 ??? –

+0

나도 궁금해. 나는 downvote하지 않았다. 그러나 당신의 대답은 정확했습니다. – 131

+0

나는 당신을 위해 upvoted – 131

2

사용 array_diff()을.

array_diff()를 사용하는 것은 단순히 특정 키를 비교하는 것보다 일반적인 솔루션입니다.

Array_diff()는 첫 번째 배열에 존재하고 두 번째 배열에 존재하지 않는 모든 항목을 나타내는 새로운 배열을 반환합니다.

첫 번째 배열에는 3 개의 키가 있고 초 배열에는 2 개의 키가 포함되어 있으므로 2 개의 일치 항목이 있으면 array_diff()는 여분의 키 (연령)가 포함 된 배열을 반환합니다.

foreach ($array_1 as $arr) { 
    if (count(array_diff($arr, $array_2[1])) === 1) {//meaning 2 out of 3 were a match 
     echo $arr['age'];//prints the age 
    } 
} 

희망이 있습니다.

3

그럼 당신은 간단한 루프에서 그것을 할 수 있습니다. $ array_1에있는 $ array_1에있는 첫 번째 요소를 $ array_1에 일치시키고 'age'를 반환하는 함수를 작성하려고합니다.

function getField($array_1, $array_2, $field) 
{ 
    foreach ($array_2 as $a2) { 
     foreach ($array_1 as $a1) { 
     $match = true; 
     foreach ($a2 as $k => $v) { 
      if (!isset($a1[$k]) || $a1[$k] != $a2[$k]) { 
       $match = false; 
       break; 
      } 
     } 
     if ($match) { 
      return $a1[$field]; 
     } 
     } 
    } 
    return null; 
} 
+0

'or'를 사용하는 것은 좋지 않습니다.'! ='보다 우선 순위가 낮습니다. http://www.php.net/manual/en/language.operators.precedence.php. 당신은'||'을 사용해야 함을 의미합니다. 또는 기다려, 당신은 그것을 의미합니까? ;) – loveNoHate

+0

네 말이 맞아, 고마워! 편집 됨. –

+0

이봐, 나도 궁금해. 실제로 읽었 니?!? 하하, 나는 실수를했다,'||'또는'또는'둘 다'! ='보다 우선 순위가 낮다. – loveNoHate

관련 문제