如何按值过滤二维数组

时间:2014-12-12 16:28:29

标签: 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
        )

如何过滤数组以仅显示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
        )

    )

修改

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

6 个答案:

答案 0 :(得分:38)

使用PHP的array_filter函数进行回调。

$new = array_filter($arr, function ($var) {
    return ($var['name'] == 'CarEnquiry');
});

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

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

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

答案 1 :(得分:1)

array_filter是您需要的功能。 http://php.net/manual/en/function.array-filter.php

给它一个这样的过滤函数:

function my_filter($elt) {
    return $elt['name'] == 'something';
}

答案 2 :(得分:1)

如果要使其成为通用函数,请使用以下命令:

function filterArrayByKeyValue($array, $key, $keyValue)
{
    return array_filter($array, function($value) use ($key, $keyValue) {
       return $value[$key] == $keyValue; 
    });
}

答案 3 :(得分:0)

<?php



    function filter_array($array,$term){
        $matches = array();
        foreach($array as $a){
            if($a['name'] == $term)
                $matches[]=$a;
        }
        return $matches;
    }

    $new_array = filter_array($your_array,'CarEnquiry');

?>

答案 4 :(得分:0)

function multi_array_search_with_condition($array, $condition)
{
    $foundItems = array();

    foreach($array as $item)
    {
        $find = TRUE;
        foreach($condition as $key => $value)
        {
            if(isset($item[$key]) && $item[$key] == $value)
            {
                $find = TRUE;
            } else {
                $find = FALSE;
            }
        }
        if($find)
        {
            array_push($foundItems, $item);
        }
    }
    return $foundItems;
}

这个我的功能可以用来解决这个问题。您可以使用:

$filtered = multi_array_search_with_condition(
   $array,
   array('name' => 'CarEnquiry')
);

这将从二维数组中获取过滤后的项目。

答案 5 :(得分:0)

上面的示例使用的是完全匹配的单词,这是一个用于过滤数组以查找不精确的“名称”匹配的简单示例。

  $options = array_filter($options, function ($option) use ($name) {
    return strpos(strtolower($option['text']), strtolower($name)) !== FALSE;
  });