2010-12-10 14 views
8

Potrzebuję usunąć z tablicy niektóre klucze.Klucze php elegancja wyłączające

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

Jak mogę zrobić więcej elegancji? Może istnieje funkcja taka jak ta array_keys_unset('a', 'b')?
Nie potrzebuję array_values ani foreach. Chcę tylko wiedzieć, czy to możliwe.
Z góry dziękuję. Przepraszam za moje angielskie i dziecinne pytanie.

Odpowiedz

15

można zrobić z pojedynczym wywołaniu unset jak:

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

Tutaj Pisałam funkcja. +1 – Stephen

+0

@Stephen: Konstrukcje językowe> funkcje: P – BoltClock

3

Osobiście po prostu to zrobić gdybym miał długą/arbitralną listę kluczy ustawić:

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

You może użyć kombinacji funkcji tablicowych, takich jak array_diff_key(), ale myślę, że powyższe jest najłatwiejsze do zapamiętania.

3

Co jest nie tak z unset()?

pamiętać, że można zrobić unset($array['a'], $array['b']);

Można również napisać funkcję, jak ten, który sugerował, ale chcę używać tablicy zamiast zmiennych parametrach.

3

Nie, nie ma wstępnie zdefiniowanej funkcji, takiej jak array_keys_unset.

Można też przejść unset wielu zmiennych:

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

Albo napisać taki array_keys_unset siebie:

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

Wywołanie tej funkcji będzie wówczas podobna do Ciebie:

array_keys_unset($array, 'a', 'b'); 
+0

+1 Najczystsze ze wszystkich rozwiązań, chociaż nienawidzę nomenklatury metody array_xxx w PHP. Nazwijmy to czymś innym ... np. 'strip_keys'. – aefxx

5

unset() jest jak s tak szybko, jak to możliwe, ale jak inne rozwiązanie?

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

Włóż do funkcji:

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

Albo można nawet uczynić go unset() -Jak przekazując jej zmienną liczbę argumentów, tak:

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: najlepsze nietrywialne rozwiązanie. – Matthew

Powiązane problemy