Php 如何在数组中找到符合条件的值,而不使用for循环?

Php 如何在数组中找到符合条件的值,而不使用for循环?,php,arrays,filtering,Php,Arrays,Filtering,我有一个这样的数组 $a = [ [ "id" => "1", "values" => [ "1", "2" ] ], [ "id" => "2", "values" => [ "1", "3" ] ], [

我有一个这样的数组

$a = [
    [
        "id"     => "1",
        "values"   => [
            "1",
            "2"
        ]
    ],
    [
        "id"     => "2",
        "values"   => [
            "1",
            "3"
        ]
    ],
    [
        "id"     => "3",
        "values"   => [
            "2",
            "4"
        ]
    ],
    [
        "id"     => "4",
        "values"   => [
            "4",
            "6"
        ]
    ],
];
搜索并返回“values”具有2的数组

$result = [
    [
        "id"     => "1",
        "values"   => [
            "1",
            "2"
        ]
    ],
    [
        "id"     => "3",
        "values"   => [
            "2",
            "4"
        ]
    ],
];
是的,我可以使用for循环,并使用in_数组返回结果,只是考虑是否有更优雅(更好)的方法来实现它

$result = [];
foreach ($a as $datum) {
    if (in_array('2', $datum['values'])) {
        $result[] = $datum;
    }
}
我尝试了数组搜索,但它不支持嵌套数组


array_search('2',array_列($a',values')

您可以在数组()中使用
array\u filter()

有关参考,请参阅:

有关示例,请参见:


阵列过滤器?哦,是的,有没有什么方法可以忽略使用in_数组进行检查?数组过滤器($data,函数($datum){if(在数组('2',$datum['values']){return$datum;}});它是这样的:array_filter($data,function($datum){returnin_array('2',$datum['values']);});
$value = '2';

$result = array_filter($a, function (array $element) use ($value) {
    return array_key_exists('values', $element) 
        && is_array($element['values']) 
        && in_array($value, $element['values'], true);
});

var_dump($result);