PHP 5.2: фильтр массива с несколькими аргументами производительности

1

Я использую этот код для фильтрации многомерного массива:

$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
    array_filter попробуйте это
  • 1
    Можно использовать любой callable объект - почему бы не создать именованную функцию и использовать ее?
Показать ещё 3 комментария
Теги:
arrays
performance

1 ответ

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');
  • 0
    Использование global в PHP не рекомендуется.
  • 1
    @numediaweb Я знаю об этом, я просто использовал это в качестве примера. Во всяком случае, я отредактировал ответ :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню