在PHP 5.5+中,如何检查给定的关联数组数组是否包含特定的键/值对。例如:
$some_array = array(
array(
"value"=> 1,
"k1"=> "austin",
"k2"=> "texas",
"k3"=> "us"
),
array(
"value"=> 15,
"k1"=> "bali",
"k2"=> "ubud",
"k3"=> "indonesia"
),
array(
"value"=> 26,
"k1"=> "hyd",
"k2"=> "telangana",
"k3"=> "india"
)
));
如何返回与k1 =' bali',k2 =' ubud'相关联的值。和k3 ='印度尼西亚'?我可以循环遍历每个元素以检查数组中是否存在该组合,但是有更简单的方法来处理它吗?
答案 0 :(得分:0)
如果您有一个目标数组的键和值,则可以使用array_diff_assoc
过滤主数组,使其仅包含与目标数组中所有键/值组合匹配的子数组。
$target =array(
"k1"=> "bali",
"k2"=> "ubud",
"k3"=> "indonesia"
);
$matches = array_filter($some_array, function($item) use ($target) {
return !array_diff_assoc($target, $item);
});
在array_filter
回调中,array_diff_assoc
会返回$target
中$item
中不存在的所有键/值对,所以如果它们都匹配,那么你'我得到一个空数组。使用!
取消该结果将返回true
以匹配数组,false
返回非匹配数组。
$matches
将是与您的一组键/值对匹配的所有子数组的数组,如果没有匹配则为空数组。