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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
$deploy[array_search($_GET['rmfromdeploy'], $deploy)] = "";
au lieu de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.