PHP 5.2:具有多个参数性能的过滤器数组

时间:2015-07-10 13:06:18

标签: php arrays performance

我正在使用此代码过滤多维数组:

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

在速度方面有没有更好的方法?

1 个答案:

答案 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');