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] Une recherche sur arrays imbriqués [Fait]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 133
    Points
    133
    Par défaut [Tableaux] Une recherche sur arrays imbriqués


    Je suis embêté avec le problème suivant :

    Je cherche à effectuer une recherche (pas un tri) sur un tableau multi-dimensionnel en vue de mettre à jour un caddie virtuel.

    Ma session $_SESSION['caddie'] est mon array principal et sous ce dernier viennent se greffer tous les produits dans d'autres array sous la forme id, quantité, prix.

    Si une âme charitable pouvait m'aider. Ca fait 2 jours que j'essaie pleins de choses mais visiblement toutes mes tentatives concernaient les "simples" array (array_search and co.)




    hpl76

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Points : 87
    Points
    87
    Par défaut
    Bonjour,

    Le but du jeu est de trouver un numéro d'article ?

    Par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $_SESSION['caddie'] => Array
       (
           [3] => 2
           [5] => 10
       )
    équivaut à commander :

    • le produit dont l'ID est 3 en quantité 2
    • le produit dont l'ID est 5 en quantité 10


    Et par exemple, il s'agirait de retrouver si l'ID 5 est bien dans le caddie ?


    Si le problème sous-jacent est la mise à jour de quantité dans le panier (par exemple une personne a choisi une quantité 5 pour l'article 2 et elle veut modifier cette quantité pour en avoir 10) alors pas besoin de rechercher si l'article est présent dans l'array $_SESSION['caddie'].

    En effet il suffit de retrouver l'ID de l'article (typiquement il est donné par un formulaire) et la quantité (typiquement donné par un formulaire aussi) et de changer directement la valeur.

    Voir l'exemple suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $id_article = $_POST['id_article']
    $nouvelle_quantite = $_POST['quantite']
     
    $_SESSION['caddie'][$id_article] = [$nouvelle_quantite];
    Ainsi si l'article est déjà présent dans le caddie, la quantité est modifiée (l'ID de l'article servant à indiquer sa position dans le tableau) et s'il n'est pas présent, alors la case est créée et une quantité lui est affectée

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 133
    Points
    133
    Par défaut
    Merci Christophe pour ton intervention, mais pour plus de clarté je vais te fournir le début de mon code, ca sera plus pratique pour comprendre ma "logique" et pour parler avec du concret.

    Voilà ce que j'ai fait :
    sur un formulaire bateau j'ai mis 3 champs de saisie correspondant à une référence sur 3 lettres, une quantité et un prix unitaire. On envoie les valeurs en mode POST vers une page de traitement (c'est vraiment qu'une partie mais c'est celle qui nous intéresse)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //page de traitement
    if (!isset($_SESSION['caddie'])){
    $_SESSION['caddie'] = array();
    array_push($_SESSION['caddie'],array("ref"=>$_POST['ref'],"qte"=>$_POST['qte'],"prix"=>$_POST['prix']));
    }else{
    //c'est ici que ca merde lol
    //dans l'idée c'est : je parcours les tableaux, je recherche si ref existe, si oui je mets à jour la quantité sinon c'est un nouveau produit -> array_push...facile à dire, à faire :aie: 
    }
    C'est vraiment qu'un début, je pense pas encore fonction, cas particuliers, c'est plus pour me familiariser avec le multi-dim'.

    Si tu pouvais m'aiguiller et me sortir de ce casse-tête je t'en serai très reconnaissant.

    hpl76

  4. #4
    Expert éminent sénior

    Avatar de Deepin
    Homme Profil pro
    Ingénieur - Chef de projet Modélisation/Simulation
    Inscrit en
    Avril 2004
    Messages
    3 164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afrique Du Sud

    Informations professionnelles :
    Activité : Ingénieur - Chef de projet Modélisation/Simulation
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 164
    Points : 51 026
    Points
    51 026
    Par défaut
    salut hpl,
    je t ai trouvé un tuto vraiment sympa sur les tableau multidimensionel. Je pense qu avec ça tu devrais tout dechirer...
    http://www.desilva.biz/arrays/filter.html
    si tu t en sors pas fais moi signe, on posera du code ensemble
    A+ et bon courage

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Points : 87
    Points
    87
    Par défaut
    Je pense qu'on ne raisonne pas de la même façon.

    Je vais tenter d'expliquer ma manière de faire qui me paraît plus simple (mais ce n'est pas certain).

    En fait à ce que j'ai compris toi tu empiles a chaque traitement l'id de l'article, sa quantité et son prix.

    Tu peux donc te retrouver avec un tableau qui ressemble à :

    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
    $_SESSION['caddie'] => Array
      (
        [ref] => Array
          (
             [0] => 2
             [1] => 6
          )
        [qte] => Array
          (
             [0] => 25
             [1] => 30
          )
        [prix] => Array
          (
             [0] => 990
             [1] => 600
          )
    )
    Qui pourrait se traduire comme :
    • J'ai commandé 25 unités du produit 2 qui coûte 990
    • J'ai commandé 30 unités du produit 6 qui coûte 600


    Si j'ai bon jusqu'ici je comprends pourquoi tu as besoin de rechercher la valeur de l'id de l'article dans ton tableau.
    En effet impossible de savoir s'il est dans la case 0, la case 1 ou la case x de l'array $_SESSION['caddie']['ref']

    Admettons que tu arrives à trouver dans quelle case de l'Array $_SESSION['caddie']['ref'] se trouve l'id de l'article (admettons que tu cherches le 51), et que cette case est la 2. Voilà le schéma plus parlant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $_SESSION['caddie'] => Array
      (
        [ref] => Array
          (
             [2] => 51
          )
    )
    Alors pour mettre à jour la quantité (admettons qu'on en veuille 200) tu voudrai aboutir au résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $_SESSION['caddie'] => Array
      (
        [qte] => Array
          (
             [2] => 200
          )
    )
    J'espère que jusqu'ici je fais bonne route.

    Cette manière de stocker les références des articles dans l'Array $_SESSION['caddie'] entraîne beaucoup de difficultés. En effet la référence de l'article, sa quantité et son prix se trouve dans des sous-Array différents !

    Et pour modifier les quantités etc. tu va avoir besoin de beaucoup de lignes de codes !

    Voilà maintenant comment je prendrai le problème :

    Tu ne fais qu'un Array, qui sera $_SESSION['caddie'].

    Puis tu utilise la référence de ton article comme clé et la quantité comme valeur associée à la clé.

    Cela donnerait le schéma suivant si l'on reprend l'exemple du début de mon message:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $_SESSION['caddie'] => Array
      (
         [2] => 25
         [6] => 30
      )
    Ici vu que la case 2 est initialisée, on sait que le client a commandé l'article 2. La case 2 valant 25, on sait que le client en a commandé 25 unités

    Evidemment cette solution sous-entend que les prix de tes articles sont enregistrés dans une BDD (tu les retrouveraient avec une requête, puisque tu as l'ID de l'article)


    J'espère que jusqu'ici je suis clair. Je m'arrête là en attendant de voir si tu comprends mon raisonnement.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Points : 133
    Points
    133
    Par défaut
    Re,

    Tu as quasiment compris le truc. En sortie, ca donne :

    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
    array(10) {
      [0]=>
      array(2) {
        ["ref"]=>
        string(3) "ABC"
        ["qte"]=>
        string(1) "5"
      }
      [1]=>
      array(2) {
        ["ref"]=>
        string(3) "DEF"
        ["qte"]=>
        string(1) "2"
      }
      [2]=>
      array(2) {
        ["ref"]=>
        string(3) "GHI"
        ["qte"]=>
        string(1) "4"
      }
    Dans l'absolu, il y a un certain temps, je faisais comme toi à savoir que je forçais l'id du tableau comme référence article et la quantité en entrée, mais à force de voir des tutos sur les caddies, paniers et de voir x tableaux j'ai voulu me lancer. Ca semble trop chaud pour mes pauvres neurones pour l'instant...Je vais tout de même tenter de persévérer. En même temps (n'y vois pas de côté intéressé) je serai curieux de voir comment toi tu procèdes car j'aime bien m'appuyer sur les visions et expériences des autres pour avancer...Merci pour ton aide et le temps emprunté . J'attends ton éventuel retour.

    @buns : j'ai jeté un oeil au tuto, j'vais essayer de me plonger dedans, merci pour le tuyau. Je suis avide de critiques, preneur de commentaires et autres pistes.

    hpl76

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Points : 87
    Points
    87
    Par défaut
    J'ai réalisé un site cette année qui utilisait un panier. Je ne sais pas si on peut envoyer des fichiers par MP mais au pire je te les upload dans une archive.

    Sinon moi aussi j'avais regardé pas mal de tutos à l'époque et il m'a fallu du temps pour bien m'approprier le concept.

    Dans tous les cas je te recontacte par MP pour les sources PHP et continuer cette discussion

Discussions similaires

  1. impression d'une recherche sur formulaire
    Par lucie31 dans le forum Access
    Réponses: 4
    Dernier message: 25/04/2006, 15h24
  2. je ne retrouve plus le lien pour lancer une recherche sur le forum
    Par harlock59 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 19/04/2006, 12h44
  3. une requete effectuant une recherche sur tous les champs
    Par raynor911 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/02/2006, 15h06
  4. Probleme lors d'une recherche sur les forums
    Par JUSTIN Loïc dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 8
    Dernier message: 27/07/2005, 12h22
  5. Réponses: 8
    Dernier message: 10/09/2004, 17h30

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