2010-12-10 80 views
8

我需要从数组中删除一些键。php优雅键不固定

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

我该如何做到这一点更优雅?也许有这样的功能array_keys_unset('a', 'b')
我不需要array_valuesforeach。我只想知道这是否可能。
预先感谢您。对不起,我的英语和孩子般的问题。

回答

15

你可以做到这一点与单一调用unset为:

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

在这里,我在写一个函数。 +1 – Stephen 2010-12-10 14:54:11

+0

@Stephen:语言构造>功能:P – BoltClock 2010-12-10 14:55:22

3

就个人而言,我只想做到这一点,如果我有钥匙的长/任意列表设置:

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

你可以使用像array_diff_key()这样的数组函数的组合,但我认为上面是最容易记住的。

3

这有什么错unset()

注意,你可以做unset($array['a'], $array['b']);

你也可以写像你提出的一个功能,但我会用一个数组,而不是可变参数。

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

+1最干净的所有解决方案,虽然我讨厌PHP的array_xxx方法命名。我们称之为别的......例如'strip_keys'。 – aefxx 2010-12-10 15:04:04

5

unset() is as s尽可能实现,但作为另一个解决方案呢?

$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'); 
+0

+1:最好的非平凡解。 – Matthew 2010-12-10 14:57:48