2014-01-28 132 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

是的大聲笑。但我首先發布了我的郵件: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

我也想知道。我沒有倒下。但你的回答是正確的。 – 131

+0

我爲你投票 – 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_2匹配在$ array_1的東西,並返回「時代」的第一個元素:

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

不好的想法是使用'或',它的優先級低於'!='。 http://www.php.net/manual/en/language.operators.precedence.php。意味着你必須使用'||'。或者等一下,你的意思是? ;) – loveNoHate

+0

你是對的,謝謝!編輯。 –

+0

嘿,我只是想知道,你真的讀過嗎?!?哈哈,我犯了一個錯誤,'||'或'或'都比'!='具有更低的優先級。 – loveNoHate