array_filter - 過濾用回調函數PHP array_filter,如何獲得回調中的密鑰?
陣列array_filter(數組$輸入[,回調$回調])
可以回調得到當前數組值的鍵,以及如何數組元素?
array_filter - 過濾用回調函數PHP array_filter,如何獲得回調中的密鑰?
陣列array_filter(數組$輸入[,回調$回調])
可以回調得到當前數組值的鍵,以及如何數組元素?
您可以使用array_walk功能在這裏討論(第3回答下):is it possible if callback in array_filter receive parameter?
在你列出你實際上是在尋找這樣的事情之前的評論:
foreach ($t as $k => $v)
if (!array_key_exists($k, $valid))
unset($t[$k])
所以實際上到刪除陣列$t
中沒有數組$valid
中的密鑰的所有值。
PHP的函數名爲array_intersect_key
。交點等於過濾結果:
$filtered = array_intersect_key($t, $valid);
有沒有辦法讓的array_filter
訪問元素的關鍵回調,也沒有類似的功能,你想要做什麼。
但是,您可以編寫自己的功能對於這一點,像下面這樣:
function arrayfilter(array $array, callable $callback = null) {
if ($callback == null) {
$callback = function($key, $val) {
return (bool) $val;
};
}
$return = array();
foreach ($array as $key => $val) {
if ($callback($key, $val)) {
$return[$key] = $val;
}
}
return $return;
}
$test_array = array('foo', 'a' => 'the a', 'b' => 'the b', 11 => 1101, '', null, false, 0);
$array = arrayfilter($test_array, function($key, $val) {
return is_string($key);
});
print_r($array);
/*
Array
(
[a] => the a
[b] => the b
)
*/
$array = arrayfilter($test_array);
print_r($array);
/*
Array
(
[0] => foo
[a] => the a
[b] => the b
[11] => 1101
)
*/
我不喜歡這裏提出的其他選項,如果其他人正在尋找此功能,這裏是一個快速實施:
function array_filter_keys($a, $c){
$i=array_filter(array_keys($a), $c);
return array_intersect_key($a, array_flip($i));
}
這個函數的結果正是這聽起來像,它將返回由接收鍵,而不是值的回調函數過濾數組。
編輯: 這是更多的免責聲明,在閱讀了一些其他評論後,我意識到OP實際上只是在尋找array_intersect
正如hakre指出的那樣。我將在這裏離開這個答案雖然由於有機磷農藥的問題沒有明確規定,需要與該頁面顯示了在谷歌的array_filter_keys
從文檔: PHP 5.6.0增加了可選的標誌參數和常量ARRAY_FILTER_USE_KEY和ARRAY_FILTER_USE_BOTH
太棘手了,我正在處理索引數組而不是關聯數組。在該解決方案中,密鑰是硬編碼的。 – gremo
也許更標準的'code'foreach($ arr as $ key => $ val){}實現可以滿足您的需求。 – jondbaker
我需要篩選輸入數組:如果其他數組中存在鍵,則返回該元素。我發現'array_filter'候選人,但我無法獲得當前數組值在回調中的關鍵。 – gremo