2011-12-09 80 views
0

我這個小功能,通過按鍵來過濾我的數組:濾波器陣列的關鍵

private function filterMyArray() 
{ 
     function check($v) 
     { 
      return $v['type'] == 'video'; 
     } 
     return array_filter($array, 'check'); 
} 

這個偉大的工程,但因爲我有更多的鍵來過濾,我在某種程度上想從傳遞變量主要功能:filterMyArray($key_to_serch)沒有成功,我也試過一個全局變量,但似乎不工作。

由於我的問題有些混亂:),我需要的是這樣的:

private function filterMyArray($key_to_serch) 
{ 
     function check($v) 
     { 
      return $v['type'] == $key_to_serch; 
     } 
     return array_filter($array, 'check'); 
} 

任何想法來傳遞變量?

+0

mmm ...嵌套函數...不是很漂亮,尤其是當php提供的功能爲你做這個。嘗試使用lambda/closure的array_map()或array_filter() – rdlowrey

回答

3

這是在PHP 5.3匿名函數派上用場了(請注意使用的use):

private function filterMyArray($key) 
{ 
    return array_filter(
     $array, 
     function check($v) use($key) { 
      return $v['type'] == $key; 
     } 
    ); 
} 
+1

Pfff,PHP開發人員應該停止將東西放入不應該存在的語言中XD – Halcyon

+0

這就是識別到位的地方:這段代碼很難理解(對我而言)如果沒有正確縮進。我剛剛修改了標識,如果您認爲自己的標識更易於閱讀,請回滾 –

0
private function filterMyArray($key_to_search) { 
    function check($v) { 
     return $v[$key_to_search] == 'video'; 
    } 
    return array_filter($array, 'check'); 
} 

應該工作,因爲內部函數可以訪問的變量外功能

0

這是一個PHP < 5.3版本使用create_function

private function filterMyArray($key) 
{ 
     $fn = create_function('$v', "return $v[$key] == 'video';"); 
     return array_filter($array, $fn); 
} 
+0

實際上,這不起作用,因爲雙引號字符串中的美元符號將被視爲變量引用。 – Jon