我需要从数组中删除一些键。
$array = array('a' => 'a', 'b' => 'b', 'c' => 'c');
unset($array['a']);
unset($array['b']);
我怎样才能做得更优雅?也许有这样的功能array_keys_unset('a', 'b')
?
我不需要array_values
或foreach
。我只想知道有没有可能。
先感谢您。对不起我的英语和孩子气的问题。
我需要从数组中删除一些键。
$array = array('a' => 'a', 'b' => 'b', 'c' => 'c');
unset($array['a']);
unset($array['b']);
我怎样才能做得更优雅?也许有这样的功能array_keys_unset('a', 'b')
?
我不需要array_values
或foreach
。我只想知道有没有可能。
先感谢您。对不起我的英语和孩子气的问题。
您可以通过一次调用unset
as 来做到这一点:
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()
通过传递可变数量的参数来使它成为 -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');
就个人而言,如果我有一个长/任意的键列表来设置,我会这样做:
foreach (array('a', 'b') as $key) unset($array[$key]);
您可以使用数组函数的组合,例如array_diff_key()
,但我认为上面是最容易记住的。
不,没有像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');