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()
, но я думаю, что вышесказанное легче всего запомнить.