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 :

[Tableaux] problème avec array_splice


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut [Tableaux] problème avec array_splice
    Bonjour à tous et à toutes,

    Voici mon problème: j'ai crée un caddie qui comme tous caddie qui se respecte permet d'ajouter et de supprimer des articles. Voici un exemple de ce que j'ai fait pour ajouter +1 à la quantitée d'un article déjà dans le caddie:
    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
     
    if(isset($_GET['plus'])){
      $size = sizeof($_SESSION['achats']);	
      for($i=0; $i < $size; $i++){
         $temp = $_SESSION["achats"][$i]['id'];
         $tempqte = $_SESSION["achats"][$i]['qte'];
         $id = $_GET['plus'];
         if(($id == $temp) & ($size > 0) & ($stop == 'false')){
           array_splice($_SESSION['achats'], $i, 1);
           $tempqte = $tempqte +1;
           $_SESSION['achats'][] = array ("id" => $temp,"qte" => $tempqte);
           $stop = "true";
         }
      }	
    }
    Ce code fonctionne très bien, j'ajoute bien plus un au bon endroit, mais voilà, du fait de mon array_splice(), je détruit l'élément déjà existant à sa position, et le recrée ensuite à la fin de mon array avec plus un avec cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION['achats'][] = array ("id" => $temp,"qte" => $tempqte);
    Le problème est que lors de l'affichage si je fais plus un à un article situé en haut de page dans mon <table>, celui ci sera affiché modifier en bas de page comme dernier élément du <table>, puisque j'affiche mon array avec un for de 0 à N!

    Ce que je voudrais c'est faire plus un à l'article correspondant là ou il se trouve ! J'ai vu qu'il était possible dans array_splice() de faire directement cela en spécifiant la valeur de nouvel élément à remplacer après l'attibut lenght dans array_splice()
    array array_splice ( array input , int offset , int length , array replacement )
    ou array replacement serait un tableau contenant les nouvelles valeurs.

    Voici ce que j'ai donc tenter de faire au code donnée au dessus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    if(isset($_GET['plus'])){
      $size = sizeof($_SESSION['achats']);	
      for($i=0; $i < $size; $i++){
         $temp = $_SESSION["achats"][$i]['id'];
         $tempqte = $_SESSION["achats"][$i]['qte'];
         $id = $_GET['plus'];
         if(($id == $temp) & ($size > 0) & ($stop == 'false')){
           $tempqte = $tempqte +1;
           array_splice($_SESSION['achats'], $i, 1, array("id" => $temp,"qte" => $tempqte));	 
           $stop = "true";
         }
      }	
    }
    Bien évidemment cela ne fonctionne pas, je n'ai pas d'erreur PhP, mais il m'affiche des éléments vide après l'élément du tableau à modifier !

    Je suis quelques peu perdu, peut être avez vous une idée sur comment faire cela?
    J'espère avoir été assez clair pour décrire mon problème!
    D'avance merci à tous et à toutes pour votre aide sur mon problème :wink

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Il y a quelque temps j'ai corrigé un script de panier qui, comme le tien parcourait tout le tableau des achats pour en modifier la quantité d'une seule ligne. Pas très efficace pour de gros tableaux. Et comme tu t'en es apperçu le tableau en est chamboulé.

    Voici un extrait de ma correction. Le principe est de faire un accès direct à l'indice du tableau à modifier. Tu adapteras bien à ton cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function modif_qte($ref_article, $qte){
      // on détermine le ou les indices des articles à modifier
      $aCleSuppr = array_keys($_SESSION['panier']['id_article'], $ref_article);
     
      // sortie si pas trouvé
      if (empty ($aCleSuppr)) return false;
     
      // on modifie les quantités des articles trouvés
      foreach($aCleSuppr as $v1){
        $_SESSION['panier']['qte'][$v1] = $qte;
      }
      return true;
    }

  3. #3
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut
    Merci à toi pour ton aide !

    J'aurais par contre une dernière question :

    J'ai modifier cette ligne comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $aCleSuppr = array_keys($_SESSION['achats']['id'], $ref_article);
    et voilà ce qu'il me retourne:
    Notice: Undefined index: id
    Warning: array_keys(): The first argument should be an array
    En pointant la ligne montrée au dessus!

    j'ai également testé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $aCleSuppr = array_keys($_SESSION['achats'][$ref_article -1]['id'], $ref_article);
    Et voilà ce qu'il me dit cette fois!
    Undefined offset: 0
    Pourrais tu m'expliquer mon erreur? Je ne suis pas encore expert des array!

    D'avance merci

  4. #4
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    salut,
    t'as defini $_SESSION['achats']['id']? surtout la partie id? si oui, où?

  5. #5
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut
    he et bien je ne l'ai pas défini avant cette ligne !

    Je le défini pour la première fois dans mon code lorsque j'y inscère la première valeur !
    Je ne sais pas comment initilaliser ma variable global de session au début !
    J'ai essayé avec un $_SESSION['achats']="";
    Mais bien évidement cela foire !

  6. #6
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    si je comprends bien, ton code s'applique a un panier ou il y a deja wq chose (puisq tu veux augmenter un nombre d'article).
    Et le panier c $_SESSION['achats'], mais les produits qui sans dans cette variables ils sont stockés coment? ils ne sont pas dans un tableau?

  7. #7
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut
    Je fais ceci lors du premier ajout d'un article dans mon panier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION['achats'][] = array ("id" => $tid,"qte" => $qte);
    Et mes id et quantitées d'articles sont toutes stockées dans la variable de session globale $_SESSION['achats'] !

  8. #8
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    dans le tout premier code que t'as mis, il y a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $temp = $_SESSION["achats"][$i]['id'];
    tu l'as toujours? parce que ça viendrait alors du fait qu'il y a le $i

  9. #9
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut
    oui je l'ai toujours.
    (je l'utilise pour me renvoyer uniquement l'id de l'élément à la position i, comme tu l'auras sans doute compris)

  10. #10
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    dans ce cas essaye de mettre quelque chose (j'ai pas dit mettre n'importe koi attention lol)) là ou il y *** :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $aCleSuppr = array_keys($_SESSION['achats']***['id'], $ref_article);
    desolé, j'ai pas tro le temps de voir la maintenant tout de suite, mais essaie de voir, ptet que tu y arriveras tout seul

  11. #11
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut
    Pour finir comme je ne trouvais pas, j'ai contourné le problème en essayant autre chose et cela focntionne parfaitement !

    Voici ma solution, elle servira peux etre a quelqu'un !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $_SESSION['achats'][$i] = array ("id" => $temp,"qte" => $tempqte);

    Bien à vous tous, merci pour votre aide

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

Discussions similaires

  1. [Tableaux] Problème avec utf8_encode()
    Par RapidJul dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 18h22
  2. [Tableaux] Problème avec array_multisort
    Par ecocentric dans le forum Langage
    Réponses: 5
    Dernier message: 27/09/2005, 14h56
  3. [Tableaux] Problème avec les boucles
    Par speed_man002 dans le forum Langage
    Réponses: 4
    Dernier message: 21/09/2005, 15h42
  4. [Tableaux] problème avec while
    Par zimotep dans le forum Langage
    Réponses: 3
    Dernier message: 11/09/2005, 10h30
  5. [Tableaux] Problème avec Switch case
    Par philippef dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2005, 16h37

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