如何判断数组是否包含另一个数组

时间:2014-01-28 18:24:04

标签: php arrays

这很令人头疼。

我有两个阵列;

$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和名称与$array_1[1]的ID和名称相同并返回$array_1[1]['age']

由于

5 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:3)

嗯,你可以在一个简单的循环中完成它。我将编写一个函数,它将$ array_2中的FIRST元素与$ 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;
}

答案 2 :(得分:2)

使用array_diff()

在我看来,使用array_diff()是一种比仅仅比较特定键更通用的解决方案。

Array_diff()返回一个新数组,该数组表示第一个数组中存在的所有条目,并且不存在于第二个数组中。

由于你的第一个数组包含3个键,而seconds数组包含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 :(得分: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;

答案 4 :(得分:0)