Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何按值过滤二维数组_Php_Arrays - Fatal编程技术网

Php 如何按值过滤二维数组

Php 如何按值过滤二维数组,php,arrays,Php,Arrays,如何创建一个按值过滤二维数组的函数 给定以下数组: Array ( [0] => Array ( [interval] => 2014-10-26 [leads] => 0 [name] => CarEnquiry [status] => NEW [appointment] => 0 ) [1

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

给定以下数组:

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'

使用带有回调的PHP函数

$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);
});

array\u filter
是您需要的功能

为其提供如下过滤功能:

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

这个函数可以用来解决这个问题。您可以使用:

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

这将从二维数组中获取筛选项。

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

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

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


使用
array\u filter()
。您知道,在您的示例中,
名称
属性都不等于字符串
“CarEnquiry”
。他们属于
CarEnquiry
。几个小时前我回答了完全相同的问题:为什么要费心于临时
true
/
false
声明?我不推荐这种冗长的解决方案。(一篇好的文章应该包括一个
break
)@Tobias是的,你可以<代码>$new=array\u filter($arr,函数($var)use($filterBy1,$filterBy2){return($var['name']==$filterBy1 | |$var['name']=$filterBy2})重新索引(从0开始):
$new=array\u值(array\u过滤器($arr,function($var){return($var['name']=='CarEnquiry');})谢谢。这个有帮助
$filtered = multi_array_search_with_condition(
   $array,
   array('name' => 'CarEnquiry')
);
function filterArrayByKeyValue($array, $key, $keyValue)
{
    return array_filter($array, function($value) use ($key, $keyValue) {
       return $value[$key] == $keyValue; 
    });
}
  $options = array_filter($options, function ($option) use ($name) {
    return strpos(strtolower($option['text']), strtolower($name)) !== FALSE;
  });