PHP:与关联数组数组中的特定键关联的返回值

时间:2017-01-18 23:08:06

标签: php arrays associative-array

在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 ='印度尼西亚'?我可以循环遍历每个元素以检查数组中是否存在该组合,但是有更简单的方法来处理它吗?

1 个答案:

答案 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将是与您的一组键/值对匹配的所有子数组的数组,如果没有匹配则为空数组。