2015-07-10 65 views
1

我使用這個代碼過濾多維數組: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']); 
       } 
      ); 

是否有速度的長期任何更好的方法?

+0

array_filter試試這個 –

+1

任何'callable'可以使用 - 爲什麼不創建一個名爲功能及使用方法是什麼? –

+1

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

回答

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

使用的PHP全局。 – numediaweb

+1

@numediaweb我所知道的是,我剛用它作爲例子,無論如何,我編輯了答案:) – pedrochaves