array運算 - php filter




PHP的array_filter,如何獲得回調中的關鍵? (4)

在之前的評論中,您概述了您實際上正在尋找這樣的東西:

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 - 使用回調函數過濾數組的元素

array array_filter(array $ input [,callback $ callback])

可以回調獲得當前數組值的關鍵和如何?


有沒有辦法讓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作為指出。 我將離開這個答案在這裡雖然由於OP的問題沒有明確說明需求和此頁面顯示在谷歌array_filter_keys








array-filter