PHP элегантность ключи отмены

Мне нужно удалить из массива несколько ключей.

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

Как я могу сделать это более элегантно? Может быть, есть такая функция array_keys_unset('a', 'b')?
Мне не нужно array_values или же foreach, Я только хочу знать, возможно ли это.
Заранее спасибо. Извините за мой английский и детский вопрос.

5 ответов

Решение

Вы можете сделать это с помощью одного звонка unset как:

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

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()- например, передав ему переменное количество аргументов, например:

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');

Что случилось с unset()?

Обратите внимание, что вы можете сделать unset($array['a'], $array['b']);

Вы также можете написать функцию, подобную той, которую вы предложили, но я бы использовал массив вместо переменных параметров.

Нет, нет предопределенной функции, такой как 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');

Лично я бы сделал это, если бы у меня был длинный / произвольный список ключей для установки:

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

Вы можете использовать комбинацию функций массива, таких как array_diff_key(), но я думаю, что вышесказанное легче всего запомнить.

Другие вопросы по тегам