我使用這個代碼過濾多維數組: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試試這個 –
任何'callable'可以使用 - 爲什麼不創建一個名爲功能及使用方法是什麼? –
我相信你已經痛苦地意識到這一點,但請注意,PHP 5.2已過時。 *非常*過時。近五年前它宣佈報廢,自那時以來沒有任何安全補丁。如果你在公共網絡服務器上運行它,你會面臨很大的風險。您還會發現,您所依賴的任何第三方庫/框架也將過時,因爲幾乎所有人都在前一段時間放棄了對PHP 5.2的支持,所以您會被困在舊版本中,再次可能會與討厭安全漏洞。如果可能,我強烈建議您嘗試升級。 – Simba