web-dev-qa-db-fra.com

PHP Effet de valeur de tableau non défini sur d'autres index

Je travaille avec une boucle PHP, et j'avais une question concernant la manière dont la désactivation affecte les clés de tableau. Ce tableau utilise les clés numériques standard attribuées par PHP, 0, 1, 2, 3 etc.... Chaque fois que unset() s'exécute sur une valeur de tableau, les clés de tableau sont-elles mélangées ou sont-elles conservées comme auparavant?

Merci pour votre temps.

19
Oliver Spryn

Les clés ne sont ni mélangées ni renumérotées. La touche unset() est simplement supprimée et les autres restent.

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

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

Testez-le vous-même, mais voici le résultat.

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
)
4
Glen Solsberry

Ils sont comme ils étaient. Cette clé est JUSTE SUPPRIMÉE

2
genesis

La clé disparaît, qu'elle soit numérique ou non. Essayez le script de test ci-dessous.

<?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
?>
2
Jeff Lambert

Cela peut paraître un peu hors contexte, mais en supprimant les valeurs d'un tableau global, appliquez la réponse de Michael Berkowski ci-dessus mais utilisée avec $GLOBALS à la place de la valeur globale que vous avez déclarée avec global $variable_name. Donc ce sera quelque chose comme:

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

Au lieu de:

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

NB: Cela ne fonctionne que si vous utilisez des variables globales.

1
David Lartey

Les clés sont maintenues avec la clé supprimée manquante, mais elles peuvent être réorganisées en procédant comme suit:

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

Les sorties:

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

Notez que si nous faisons les choses suivantes sans réorganiser:

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

L'index de la valeur 3 sera 5 car il sera poussé à la fin du tableau et ne tentera pas de vérifier ou de remplacer l'index manquant. Ceci est important à retenir lors de l’utilisation de FOR LOOP avec accès à l’index.

0
Amr Berag