Я использую этот код для фильтрации многомерного массива:
$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']); } );
Есть ли какие-то лучшие подходы в скорости?
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');