我有一个关联数组,想检查一个数组是否在该关联数组中,如果是,我想获取匹配的数组。
我的关联数组如下所示:
$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
);
任何帮助将不胜感激。
答案 0 :(得分:0)
如果循环数组并使用array_intersect,它将返回名字和姓氏。
如果不匹配,则返回空数组。
这意味着如果匹配成功,我们可以轻松进行操作,然后将子数组添加到新数组中。
foreach($assoc_array as $sub){
$match = array_intersect($sub, $array);
if($match) $new[] = $sub;
}
var_dump($new);
或将其压缩为:
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