我正在使用此代码过滤多维数组:
$sourceArray = array(
array('name'=>'banana', 'color'=>'green'),
array('name'=>'banana', 'color'=>'black'),
array('name'=>'banana', 'color'=>'yelow'),
);
$arrayToCompare = array('type'=>'fruits','has_name'=>'banana', 'has_color'=>'yelow');
$filtered = array();
foreach($sourceArray as $item) {
if($item['name'] !== $arrayToCompare['has_name']) continue;
if($item['color'] !== $arrayToCompare['has_color']) continue;
$filtered[] = $item;
}
但我认为可能会有一个有效/快速的解决方案。
在PHP 5.3中,我们可以在本地filter_array()内使用匿名函数(闭包),但在5.2中不支持它们:
$filtered = array_filter(
$masterItems,
function ($arr) use ($arrayToCompare) { // PHP 5.3 is required here!!
return ($arr['name'] == $arrayToCompare['has_name']
AND $arr['color'] == $arrayToCompare['has_color']);
}
);
在速度方面有没有更好的方法?
答案 0 :(得分:0)
PHP 5.2接受array_filter
函数中的回调名称。
function filter($arr)
{
$arrayToCompare = array('type'=>'fruits','has_name'=>'banana', 'has_color'=>'yelow');
return $arr['name'] == $arrayToCompare['has_name']
&& $arr['color'] == $arrayToCompare['has_color'];
}
$filtered = array_filter($masterItems, 'filter');