2011-06-16 9 views
19

Estoy trabajando con un bucle de PHP, y tenía una pregunta sobre cómo unset afecta las teclas de matriz. Esta matriz usa las teclas numéricas estándar asignadas por PHP, 0, 1, 2, 3 etc.... Cada vez que unset() se ejecuta en un valor de matriz, ¿se mezclan las claves de la matriz o se mantienen como antes?Efecto de valor de Arreglo de Arreglo de PHP en otros índices

Gracias por su tiempo.

+10

Esto es algo que podría haber probado trivialmente usted mismo ... –

+1

Podría haberlo intentado a sí mismo, pero ahora esta cuestión está consolidada aquí, lo que es importante para las búsquedas de Google unset simple. Definitivamente me ayudó, así que te agradezco Oliver. –

+1

@SweetChillyPhilly Esa no es la primera vez que SO ha reemplazado a la documentación/ejemplos triviales. Me alegro de que haya ayudado. –

Respuesta

39

Las claves no se mezclan ni renumeran. La clave unset() simplemente se elimina y las demás permanecen.

$a = array(1,2,3,4,5); 
unset($a[2]); 
print_r($a); 

Array 
(
    [0] => 1 
    [1] => 2 
    [3] => 4 
    [4] => 5 
) 
+0

Eso es todo lo que necesitaba Michael, ¡gracias! –

+0

@Michael podemos eliminar valores específicos de una matriz como '4' con solo uno con' unset() ' – Rafee

+1

@Rafee ¿Quiere eliminar varios valores con un' unset() '? Si es así, podría usar 'array_diff()' para devolver una nueva matriz sin los valores que quería eliminar. –

2

Son como eran. Esa única clave es SIMPLEMENTE ELIMINADA

+0

Genial, génesis. ¡Gracias! –

4

Pruébela usted mismo, pero aquí está la salida.

php -r '$a=array("a","b","c"); print_r($a); unset($a[1]); print_r($a);' 
Array 
(
    [0] => a 
    [1] => b 
    [2] => c 
) 
Array 
(
    [0] => a 
    [2] => c 
) 
2

La clave desaparece, ya sea numérica o no. Prueba el script de prueba a continuación.

<?php 
    $t = array('a', 'b', 'c', 'd'); 
    foreach($t as $k => $v) 
     echo($k . ": " . $v . "<br/>"); 
    // Output: 0: a, 1: b, 2: c, 3: d 

    unset($t[1]); 

    foreach($t as $k => $v) 
     echo($k . ": " . $v . "<br/>"); 
    // Output: 0: a, 2: c, 3: d 
?> 
1

Esto podría ser un poco fuera de contexto, pero en los valores de desarmado de una matriz global, se aplica la respuesta de Michael Berkowski anteriormente, pero en uso con $GLOBALS en lugar del valor mundial se declaran con global $variable_name. Por lo que será algo como:

unset($GLOBALS['variable_name']['array_key']);

En lugar de:

global $variable_name; unset($variable_name['array_key']);

NB: Esto sólo funciona si está utilizando variables globales.

0

Las claves se mantienen sin la llave faltante pero pueden ser reorganizados al hacer esto:

$array = array(1,2,3,4,5); 
unset($array[2]); 
$arranged = array_values($array); 
print_r($arranged); 

Salidas:

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 4 
    [3] => 5 
) 

Tenga en cuenta que si hacemos lo siguiente sin reordenar:

unset($array[2]); 
$array[]=3; 

El índice del valor 3 será 5 porque se desplazará hasta el final de la matriz y no intentará verificar o reemplazar el índice que falta. Esto es importante de recordar cuando se utiliza FOR LOOP con acceso de índice.