8

我需要从数组中删除一些键。

$array = array('a' => 'a', 'b' => 'b', 'c' => 'c');
unset($array['a']);
unset($array['b']);

我怎样才能做得更优雅?也许有这样的功能array_keys_unset('a', 'b')
我不需要array_valuesforeach。我只想知道有没有可能。
先感谢您。对不起我的英语和孩子气的问题。

4

5 回答 5

15

您可以通过一次调用unsetas 来做到这一点:

unset($array['a'],$array['b']);
于 2010-12-10T14:52:34.063 回答
5

unset()很简单,但是作为另一种解决方案呢?

$keys_to_remove = array_flip(array('a', 'b'));
$array = array_diff_key($array, $keys_to_remove);

放入一个函数:

function array_unset_keys(array $input, $keys) {
    if (!is_array($keys))
        $keys = array($keys => 0);
    else
        $keys = array_flip($keys);

    return array_diff_key($input, $keys);
}

$array = array_unset_keys($array, array('a', 'b'));

或者你甚至可以unset()通过传递可变数量的参数来使它成为 -like ,如下所示:

function array_unset_keys(array $input) {
    if (func_num_args() == 1)
        return $input;

    $keys = array_flip(array_slice(func_get_args(), 1));

    return array_diff_key($input, $keys);
}

$array = array_unset_keys($array, 'a', 'b');
于 2010-12-10T14:54:59.527 回答
3

就个人而言,如果我有一个长/任意的键列表来设置,我会这样做:

foreach (array('a', 'b') as $key) unset($array[$key]);

您可以使用数组函数的组合,例如array_diff_key(),但我认为上面是最容易记住的。

于 2010-12-10T14:54:18.610 回答
3

有什么问题unset()

请注意,您可以这样做unset($array['a'], $array['b']);

您也可以编写一个像您建议的那样的函数,但我会使用数组而不是变量参数。

于 2010-12-10T14:54:50.610 回答
3

不,没有像array_keys_unset.

您可以传递unset多个变量:

unset($array['a'], $array['b']);

或者你array_keys_unset自己写这样一个:

function array_keys_unset(array &$arr) {
    foreach (array_slice(func_get_args(), 1) as $key) {
        unset($arr[$key]);
    }
}

该函数的调用将与您的类似:

array_keys_unset($array, 'a', 'b');
于 2010-12-10T14:54:56.450 回答