2010-12-10 16 views
8

Necesito eliminar de una matriz algunas teclas.php teclas de elegancia desarmando

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

¿Cómo puedo hacer esto más elegancia? Tal vez hay una función como esta array_keys_unset('a', 'b')?
No necesito array_values o foreach. Solo quiero saber si es posible.
Gracias de antemano. Perdón por mi pregunta inglesa e infantil.

Respuesta

15

Usted puede hacer eso con una sola llamada a unset como:

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

Aquí estaba escribiendo Una función. +1 – Stephen

+0

@Stephen: construcciones de lenguaje> funciones: P – BoltClock

3

Personalmente, yo sólo haría esto si tuviera una lista larga/arbitrario de claves para establecer:

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

Usted podría usar una combinación de funciones de matriz como array_diff_key(), pero creo que lo anterior es lo más fácil de recordar.

3

¿Qué pasa con unset()?

Tenga en cuenta que usted puede hacer unset($array['a'], $array['b']);

También puede escribir una función como la que usted ha sugerido, pero que haría uso de una matriz en lugar de los parámetros variables.

3

No, no hay una función predefinida como array_keys_unset.

Usted podría pasar unset múltiples variables:

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

O usted escribe tal array_keys_unset mismo:

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

La llamada de esa función sería entonces similar a la suya:

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

+1 La más limpia de todas las soluciones, aunque odio la nomenclatura del método array_xxx de PHP. Vamos a llamarlo de otra manera ... p. 'strip_keys'. – aefxx

5

unset() es como s Implemente como sea, pero como otra solución, ¿qué tal esto?

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

puesto en una función:

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

o incluso podría hacer que unset() -como pasándolo a un número variable de argumentos, así:

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: la mejor solución no trivial. – Matthew