检查数组是否在数组中并在PHP中获得匹配

时间:2018-11-02 11:54:07

标签: php arrays

我有一个关联数组,想检查一个数组是否在该关联数组中,如果是,我想获取匹配的数组。

我的关联数组如下所示:

 $assoc_array = array(
  array(
   'firstname' => 'John',
   'lastname' => 'Doe',
   'age' => 26
  ),
  array(
   'firstname' => 'Sophia',
   'lastname' => 'Smith',
   'age' => 30
  )
 );

然后,如果我要检查此数组:

 $array = array(
   'firstname' => 'John',
   'lastname' => 'Doe'
 );

这会给我这个结果:

array(
 'firstname' => 'John',
 'lastname' => 'Doe',
 'age' => 26
);

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

如果循环数组并使用array_intersect,它将返回名字和姓氏。
如果不匹配,则返回空数组。

这意味着如果匹配成功,我们可以轻松进行操作,然后将子数组添加到新数组中。

foreach($assoc_array as $sub){
    $match = array_intersect($sub, $array);
    if($match) $new[] = $sub;
}
var_dump($new);

https://3v4l.org/enaXb

或将其压缩为:

foreach($assoc_array as $sub){
    if(array_intersect($sub, $array)) $new[] = $sub;
}
var_dump($new);

答案 1 :(得分:0)

尝试下面的snippet.array_intersect_assoc应该可以解决问题-

<?php
$haystack = array(
    array(
       'firstname' => 'John',
       'lastname' => 'Doe',
       'age' => 26
    ),
    array(
       'firstname' => 'Sophia',
       'lastname' => 'Smith',
       'age' => 30
    )
);

$needle = array(
   'firstname' => 'John',
   'lastname' => 'Doe'
);

function returnMatchValues($haystack = array(), $needle = array()) {
    ksort($needle);
    foreach ($haystack as $key=>$val) {

    if(count($needle) === count(array_intersect_assoc ($val, $needle))) {
        return $haystack[$key];
    }
}
return [];
}

print_r(returnMatchValues($haystack, $needle)); 


?>

参考:http://de2.php.net/manual/en/function.array-intersect-assoc.php

答案 2 :(得分:0)

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"green","g"=>"blue");

$result=array_diff($a1,$a2);
print_r($result);

链接:https://www.w3schools.com/php/showphp.asp?filename=demo_func_array_intersect