IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Utilisation de la fonction unset()


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut 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 : 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.

  2. #2
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 37
    Points : 40
    Points
    40
    Par défaut
    c'est normal en fait.

    C'est pas ton code unset etc... qui pose probleme mais ta sortie de ton tableau.

    Pour faire simple, tu as un tableau de ce type la :
    deploy[0] : 1
    deploy[1] : 3
    deploy[2] : 2
    deploy[4] : 4

    tu fais un unset(deploy[1]) par exemple. Tu te retrouves avec un tableau de ce type la en fait :
    deploy[0] : 1
    deploy[2] : 2
    deploy[4] : 4

    et non
    deploy[0] : 1
    deploy[1] : NULL
    deploy[2] : 2
    deploy[4] : 4

    ce qui fait que ton tableau a bien que 3 éléments donc dans ta boucle for
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for ($i=0; $i<sizeof($deploy);$i++) print $i.":".$deploy[$i]."<br />";
    Tu prends les elements 1 par 1 jusqu'a 3, car la taille de ton tableau est bien de 3 elements, mais le hic c'est que tu n'as pas d'element a l'index 1. Donc c pour cela que ta boucle ne ressort pas le deploy[4].

    Pour visualiser correctement ton tableau, fait plutot un var_dump($deploy).

    Ou sinon tu continues a boucler mais en utilisant la taille du tabelau initial (celle que tu as mis dans $cptDpl).

  3. #3
    Membre actif Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut
    Ok, merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [LG]Utilisation de la fonction time
    Par kmitz dans le forum Langage
    Réponses: 4
    Dernier message: 08/04/2005, 13h05
  2. Utilisation de la fonction de déploiement
    Par mchicoix dans le forum XMLRAD
    Réponses: 4
    Dernier message: 01/03/2005, 14h35
  3. [LG]Utilisation de la fonction Random
    Par chloe95 dans le forum Langage
    Réponses: 1
    Dernier message: 01/03/2005, 14h20
  4. Utilisation de la fonction qsort
    Par Jsmeline dans le forum C
    Réponses: 8
    Dernier message: 28/01/2005, 12h40
  5. [LG]librairies : utiliser seulement quelques fonctions
    Par wwwroom dans le forum Langage
    Réponses: 13
    Dernier message: 14/05/2004, 22h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo