Utilisation de la fonction unset()
Salut à tous,
Je crois avoir un problème avec la fonction unset.
Voici mon code, il s'agit d'un code qui envoie un tableau en get, le récupère et permet d'ajouter ou de supprimer des valeurs à ce tableau :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
if(!empty($_GET['deploy'])) {
$deploy = unserialize(urldecode($_GET['deploy']));
$cptDpl = sizeof($deploy);
//Si on a demandé le déploiement d'un tableau sous-jacent
//Et que ce tableau sous-jacent n'est pas déjà déployé alors,
//Alors, l'ajouter à la liste des tableaux sous-jacents déployés
if (!empty($_GET['addtodeploy']) && !in_array($_GET['addtodeploy'], $deploy)) $deploy[$cptDpl] = $_GET['addtodeploy'];
//Si l'on a demandé à cacher un tableau sous-jacent et que ce tableau est dans la liste, alors on l'enlève
if (!empty($_GET['rmfromdeploy']) && in_array($_GET['rmfromdeploy'], $deploy)) {
//Trouver la position de l'id de ce tableau dans la liste en la parcourrant
unset($deploy[array_search($_GET['rmfromdeploy'], $deploy)]);
//for ($i=0; $i<sizeof($deploy);$i++) {
//if ($deploy[$i] == $_GET['rmfromdeploy']) $rm = $i;
//}
print "index to remove : ".$rm."<br />";
//unset($deploy[$rm]);
}
//Afficher le contenu de la liste des tableaux sous-jacents
for ($i=0; $i<sizeof($deploy);$i++) print $i.":".$deploy[$i]."<br />";
} else {
$deploy = array(); //Tableau destiné à recevoir les id des tableaux sous-jacents à déplier
$cptDpl = 0; //Compte le nombre de tableaux sous-jacents déployés
}
if (in_array(1, $deploy)) {?>
<a href="index.php?deploy=<? print urlencode(serialize($deploy));?>&rmfromdeploy=1">-1</a><br /><?
} else {?>
<a href="index.php?deploy=<? print urlencode(serialize($deploy));?>&addtodeploy=1">+1</a><br /><?
}
if (in_array(2, $deploy)) {?>
<a href="index.php?deploy=<? print urlencode(serialize($deploy));?>&rmfromdeploy=2">-2</a><br /><?
} else {?>
<a href="index.php?deploy=<? print urlencode(serialize($deploy));?>&addtodeploy=2">+2</a><br /><?
}
if (in_array(3, $deploy)) {?>
<a href="index.php?deploy=<? print urlencode(serialize($deploy));?>&rmfromdeploy=3">-3</a><br /><?
} else {?>
<a href="index.php?deploy=<? print urlencode(serialize($deploy));?>&addtodeploy=3">+3</a><br /><?
}
if (in_array(4, $deploy)) {?>
<a href="index.php?deploy=<? print urlencode(serialize($deploy));?>&rmfromdeploy=4">-4</a><br /><?
} else {?>
<a href="index.php?deploy=<? print urlencode(serialize($deploy));?>&addtodeploy=4">+4</a><br /><?
} |
La partie ajout fonctionne très bien, je peux ajouter les valeurs que je veux via les liens. Voici la trace obtenue :
Mais si je demande à supprimer la valeur 3, en cliquant sur le lien -3, la valeur 3 sera supprimée, mais le valeur 4 ne sera plus prise en compte... De plus, il y a une valeur nulle qui se balade... Voici la trace obtenue :
J'ai l'impression que mon tableau perd une case : Ce que je veux. Mais que les valeurs qu'il contient ne suivent pas le mouvement du tableau...
Quelqu'un voit-t-il comment résoudre ce problème ou voit-il un autre problème?
Pour l'instant je contourne le problème en utilisant
Code:
$deploy[array_search($_GET['rmfromdeploy'], $deploy)] = "";
au lieu de
Code:
unset($deploy[array_search($_GET['rmfromdeploy'], $deploy)]);
même si ce n'est pas très propre d'avoir des valeurs vides dans un tableau.
Merci d'avance.