Я использую этот код для фильтрации многомерного массива:PHP 5.2: Фильтр массива с несколькими аргументами производительность
$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']);
}
);
Существуют ли более эффективные подходы в плане скорости?
array_filter попробуйте это –
Может использоваться любое 'вызываемое' -почему не вызывать именованную функцию и использовать ее? –
Я уверен, что вы уже очень это осознаёте, но учтите, что php 5.2 устарел. * ОЧЕНЬ * устаревший. Он был объявлен в конце жизни почти полвека назад, и с тех пор он не имел никаких защитных патчей. Если вы используете его на общедоступном веб-сервере, вы подвергаете себя большому риску. Вы также обнаружите, что любые сторонние библиотеки/фреймворки, на которые вы полагаетесь, также будут устаревшими, так как почти все отказались от поддержки php 5.2 некоторое время назад, поэтому вы будете застрять на старых версиях, опять же, вероятно, с неприятными дыры безопасности. Я настоятельно рекомендую вам попробовать обновить, если это возможно. – Simba