我如何创建一个按值过滤二维数组的函数?
给出以下数组:
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'
。
答案 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;
});