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 :
La partie ajout fonctionne très bien, je peux ajouter les valeurs que je veux via les liens. Voici la trace obtenue :
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 /><? }
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 0:1 1:3 2:2 3:4
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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 0:1 1: 2:2
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 utilisantau lieu de
Code : Sélectionner tout - Visualiser dans une fenêtre à part $deploy[array_search($_GET['rmfromdeploy'], $deploy)] = "";même si ce n'est pas très propre d'avoir des valeurs vides dans un tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part unset($deploy[array_search($_GET['rmfromdeploy'], $deploy)]);
Merci d'avance.
Partager