如何按值过滤二维数组

aph*_*wix 21 php arrays

我如何创建一个按值过滤二维数组的函数?

给出以下数组:

Array
(
    [0] => Array
        (
            [interval] => 2014-10-26
            [leads] => 0
            [name] => CarEnquiry
            [status] => NEW
            [appointment] => 0
        )

    [1] => Array
        (
            [interval] => 2014-10-26
            [leads] => 0
            [name] => CarEnquiry
            [status] => CALL1
            [appointment] => 0
        )

    [2] => Array
        (
            [interval] => 2014-10-26
            [leads] => 0
            [name] => Finance
            [status] => CALL2
            [appointment] => 0
        )

    [3] => Array
        (
            [interval] => 2014-10-26
            [leads] => 0
            [name] => Partex
            [status] => CALL3
            [appointment] => 0
        )
Run Code Online (Sandbox Code Playgroud)

如何过滤数组以仅显示包含name键中特定值的那些数组?例如name = 'CarEnquiry'.

结果输出将是:

Array
(
    [0] => Array
        (
            [interval] => 2014-10-26
            [leads] => 0
            [name] => CarEnquiry
            [status] => NEW
            [appointment] => 0
        )

    [1] => Array
        (
            [interval] => 2014-10-26
            [leads] => 0
            [name] => CarEnquiry
            [status] => CALL1
            [appointment] => 0
        )

    )
Run Code Online (Sandbox Code Playgroud)

编辑

我忘了提到搜索值应该可以互换 - 即name = 'CarEnquiry'name = 'Finance'.

dch*_*ton 51

将PHP的array_filter函数与回调一起使用.

$new = array_filter($arr, function ($var) {
    return ($var['name'] == 'CarEnquiry');
});
Run Code Online (Sandbox Code Playgroud)

编辑:如果需要可以互换,可以稍微修改一下代码:

$filterBy = 'CarEnquiry'; // or Finance etc.

$new = array_filter($arr, function ($var) use ($filterBy) {
    return ($var['name'] == $filterBy);
});
Run Code Online (Sandbox Code Playgroud)

  • @托比亚斯是的,你可以这样做。`$new = array_filter($arr, 函数 ($var) use ( $filterBy1, $filterBy2 ) { return ($var['name'] == $filterBy1 || $var['name'] == $filterBy2 ) });` (2认同)

sta*_*cky 5

如果你想让它成为一个通用函数,请使用:

function filterArrayByKeyValue($array, $key, $keyValue)
{
    return array_filter($array, function($value) use ($key, $keyValue) {
       return $value[$key] == $keyValue; 
    });
}
Run Code Online (Sandbox Code Playgroud)