php - 如何在关联数组的数组中搜索多个键/值对并返回匹配项?
Posted
技术标签:
【中文标题】php - 如何在关联数组的数组中搜索多个键/值对并返回匹配项?【英文标题】:php - how to search for multiple key/value pairs in an array of associative arrays and return matching items? 【发布时间】:2017-11-27 00:28:22 【问题描述】:这是关联数组:
Array
(
[tableData] => Array
(
[0] => Array
(
[booking_name] => abc/xyz/123
[pdg] => assure
[user_area] => es st
[release] => oss72
[start_date] => 2017-06-20 00:00:00
[end_date] => 2017-06-23 00:00:00
[asset_info] => Array
(
[0] => Array
(
[status] => 10
[manufacturer] => HP
[model] => HP BL460C GEN8
[hardware_color] => #0066b3
)
)
[full_name] => Valay Desai
[email_address] => valay@xyz.com
)
[1] => Array
(
[booking_name] => abc/xyz/123
[pdg] => assure
[user_area] => ls reca
[release] => oss72
[start_date] => 2017-06-20 00:00:00
[end_date] => 2017-06-23 00:00:00
[asset_info] => Array
(
[0] => Array
(
[status] => 10
[manufacturer] => SUN
[model] => SUN GEN8
[hardware_color] => #0066b3
)
)
[full_name] => Chako Desai
[email_address] => chako@xyz.com
)
......
[500] => Array ()
)
)
我知道使用array_filter
过滤数据并比较值的正常方法。我想在tableData
中搜索以下键/值对。
Array
(
[booking_name] => abc
[pdg] => Array
(
[0] => Array
(
[name] => Invalid
[value] => Invalid
)
[1] => Array
(
[name] => assure
[value] => assure
)
)
[user_area] => Array
(
[0] => Array
(
[name] => es st
[value] => es st
)
[1] => Array
(
[name] => Invalid
[value] => Invalid
)
[2] => Array
(
[name] => a&o
[value] => a&o
)
)
)
理想的输出应该是来自 tableData
的第一个元素,因为它具有 booking_name=abc、pdg=assure 和 user_area=es st
我试过了:
// bigarray is an originial array to be filtered
// filterObj is an array with multiple filter conditions
array_filter($bigarray, function ($val_array) use ($filterObj)
$intersection = array_intersect_assoc($val_array, $filterObj);
return (count($intersection)) === count($filterObj);
);
这总是返回空白数组。
仅供参考-我是 php
的新手。
更新 1:
我使用下面的方法来获取具有visible:true
的对象。对提出的问题进行了类似的尝试,但无法获得理想的结果。
$columnVisible = array(
'visible' => 1,
);
$visibleColumns = array_filter($passedColumns, function ($val_array) use ($columnVisible)
$intersection = array_intersect_assoc($val_array, $columnVisible);
return (count($intersection)) === count($columnVisible);
);
如何在关联数组上应用作为数组数组传递的多个过滤条件?
【问题讨论】:
我不太清楚你的问题.. @BEJGAMSHIVAPRASAD 我已经更新了问题和详细信息。我希望现在很清楚。 【参考方案1】:试试这个解决方案。
$filters = array('pdg'=>array('xyzabc'), 'user_area'=>array('ls reca'));
$filter_items = array();
foreach( $items['tableData'] as $item )
$i=0;
$is_match = true;
foreach( $filters as $key=>$value)
//$is_match = true;
if( !in_array( $item[$key], $value) )
$is_match = false;
break;
//$is_match = true;
if( $is_match )
$filter_items[] = $item;
【讨论】:
这不适用于提供的数组过滤器。但是,这在您为过滤器 ($filters) 指定的格式下可以正常工作。以上是关于php - 如何在关联数组的数组中搜索多个键/值对并返回匹配项?的主要内容,如果未能解决你的问题,请参考以下文章