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 :

Créer un tableau associatif


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 58
    Points
    58
    Par défaut Créer un tableau associatif
    Bonjour

    Je patauge avec les associatifs; Je voudrais, lorsqu'on clique sur un bouton incrémenter un tableau du style $tableau=(($produitCommandé,$quantitéCommandé),($produitCommandé,$quantitéCommandé)....)

    je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $toadd = array("idCommandé" => $aId, "quantité" => $selectNameValue);
     
    	foreach ($toadd as $k=>$v) { 
       	$arrayPanier[$k] = $v;
    	}
    Mais ça remplace la valeur et ça n'encrémente pas le tableau (je voudrais faire un push en quelque sorte

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    tu t'y prends pas mal...

    c'est plutot comme ceci que ton array devrait être construit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Array (
            id_commande1 => quantite 1,
            id_commande2 => quantite 2,
            id_commande3 => quantite 3,
            etc...
    )
    donc
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $id_article = $_POST['id_article'];
     
    if( in_array($id_article, array_keys($toadd)) ) {
         $toadd[$id_article]++;
    } else {
         $toadd[$id_article] = 1;
    }

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 58
    Points
    58
    Par défaut
    Merci de ta réponse mais c'est pas clair pour moi (oops !!) je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $toadd = array($idArticle=> $quantite);
     
    if( in_array( $idArticle, array_keys($toadd)) ) {
         $toadd[$idArticle]++;
    } else {
         $toadd[$idArticle] = 1;
    }
    Mais ça n'incremente pas le tableau, ça remplace la premiere valeur....

    Je m'y prends comme un manche surement mais je bloque la...

  4. #4
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    déjà faut pas écrire ça, tu reset ton tableau à chaque fois... enfin sauf si c'est ce que tu veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $toadd = array($idArticle=> $quantite);

    sinon pour le reste, le code est correct...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 58
    Points
    58
    Par défaut
    Désolé mais je vois pas; ça ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if( in_array( $idArticle, array_keys($toadd)) ) {
         $toadd[$idArticle]++;
    		} else {
         $toadd[$idArticle] = 1;
    	}
    	$toadd[$idArticle]= $quantite;
    ou est ce que je dois lui donner la structure du tableau à ce moment la ?

  6. #6
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Ne comprends tu pas qu'une égalité écrase les précédentes valeurs ?

    exemple :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $a = 0;
    $b = 1;
     
    for( $i=0; $i < 100; $i++ ) {
         $a++;
    }
    // Ici $a vaut 99
     
    $a = $b; // $a vaut maintenant 1.
    C'est exactement ce que tu fais...


    Dans le code que je t'ai donné, c'était juste une PISTE qui devait ensuite t'amener à réfléchir à tes besoins mais bon...
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if( in_array( $idArticle, array_keys($toadd)) ) {
         $toadd[$idArticle] += $quantite; // j'ajoute la $quantité necessaire au lieu de simplement faire +1
    } else {
         $toadd[$idArticle] = 1;
    }

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message


    Dans le code que je t'ai donné, c'était juste une PISTE qui devait ensuite t'amener à réfléchir à tes besoins mais bon...
    Oui ça j'avais bien compris, le probleme c'est que comme préciser sur l'entete du salon, je débute (et encore plus avec les associatifs) et que pour moi le code ci dessous incrémentait l'indice du tableau
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if( in_array( $idArticle, array_keys($toadd)) ) {
         $toadd[$idArticle] ++; } else {
         $toadd[$idArticle] = 1;
    }
    Quoi qu'il en soit ce n'est pas ce que je recherche j'ai du mal m'exprimer; avec ce que tu viens de me donner j'obtiens un tuc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(1) { [32]=> int(8) }
    et qui va rester tel quel en changant juste de valeur à l'appel de la fonction par exmple au premier appel ce sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(1) { [32]=> int(8) }
    au deuxieme ce sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(1) { [47]=> int(5) }
    au troisieme ce sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(1) { [27]=> int(17) }
    mais ce que je voudrais c'est que le tableau grandisse comme avec un push et que après le troisieme appel il soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(1) { [32]=> int(8),[47]=> int(5), 27]=> int(17)}

  8. #8
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    t'aurais pas écrit

    $toadd = array();

    en haut de ton code ? -___________________-

    pcq mon code fait ce que tu souhaites.


    PS : copie/colle une plus grand partie de ton code, car le peu de code que tu rajoutes reset à chaque fois l'array()...................

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    t'aurais pas écrit

    $toadd = array();

    en haut de ton code ? -___________________-

    pcq mon code fait ce que tu souhaites.
    Ben si (je l'ai mis en dehors de la fonction) parce que sinon il me dis "Warning: array_keys() [function.array-keys]: The first argument should be an array " donc ou faut-il initialiser l'array a ce moment la

    Citation Envoyé par darkstar123456 Voir le message
    PS : copie/colle une plus grand partie de ton code, car le peu de code que tu rajoutes reset à chaque fois l'array()...................
    Que veut tu dire ?

  10. #10
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    je veux dire que le fait d'écrire $toadd = array() supprime tout ce qu'il y avait pu avoir dedans...

    montre tout le code stp....

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 58
    Points
    58
    Par défaut
    Merci de prendre le temps...Donc j'ai refait en épurant et renommant mes variables mais toujours avec le même resultat, voici :
    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
     
    if (isset($_GET['aSelect'])){
    	$aId = $_GET['aId'];
    	$quantite = $_GET['quantite'];
     
    	if (!isset($arrayPanier)){
    		$arrayPanier=array();
    		}else{
    		if (!is_array($_SESSION['arrayPanier'])){$_SESSION['arrayPanier']=array();}
    		$arrayPanier=$_SESSION['arrayPanier'];
    	}
     
     
    	if( in_array( $aId, array_keys($arrayPanier)) ) {
         $arrayPanier[$aId]+=$quantite;
    		} else {
         $arrayPanier[$aId] = $quantite;
    	}
     
    	$_SESSION['arrayPanier'] = $arrayPanier ;
    }

  12. #12
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    hmm j'ai simplifié un peu le code, bien qu'après vérification, il semble correct.
    J'ai donc ajouté une tite phrase de debuggage

    Code php : 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
     
    <?php
    if (isset($_GET['aSelect'])){
    	echo "<p>la condition est respectée</p>";
    	$aId = $_GET['aId'];
    	$quantite = $_GET['quantite'];
     
    	if (!isset($_SESSION['arrayPanier'])){
    		$_SESSION['arrayPanier'] = array();
    	}
    	$arrayPanier = $_SESSION['arrayPanier'];
     
    	if( in_array( $aId, array_keys($arrayPanier)) ) {
    		$arrayPanier[$aId] += $quantite;
    	} else {
    		$arrayPanier[$aId] = $quantite;
    	}
     
    	$_SESSION['arrayPanier'] = $arrayPanier ;
    }
    ?>

    Vois-tu bien la phrase apparaitre ?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 58
    Points
    58
    Par défaut
    Oui elle apparait bien (j'ai laissé quand même mon test du $_session['arrayPanier'] car a l'initialisation il vaut une chaine ("Aucun article dans votre commande actuellement") et malheureusement toujours un seul element dans le tableau

  14. #14
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    hmm vraiment bizarre... j'suis fatigué mais je ne vois pas de soucis dans le code... je ne vois plus qu'un truc à tester :
    as-tu vérifier les valeurs $_GET ? récupère-tu bien ce que tu souhaite ? (et les valeurs ont-elles bien des ID différents ?)

    Vraiment étrange....

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 58
    Points
    58
    Par défaut
    Oui oui pas de probleme les valeurs sont bonnes, je m'arrache les cheveux la je ne comprends pas ce qui se passe, je cherche a vider les variables sessions concernées avant de les réaffecter pour voir mais ça n'a pas l'air de faire grand chose (et c'est pas logique)

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 58
    Points
    58
    Par défaut
    ben j'arrive même pas à faire un unset dis donc si je fait unset($_SESSION['arrayPanier']); ça me dis Undefined variable: _SESSION !!!

  17. #17
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    et le print_r($_SESSION) fonctionne ? Oo

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 58
    Points
    58
    Par défaut
    oui il me renvoit cette forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [arrayPanier] => Array ( [32] => 8 ) )
    PS au temps pour moi pour le unset je le faisais avant l'affectation mais ça ne sert a rien de toute façon...

  19. #19
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    là je sèche perso... d'apres le bout code, tout à l'air correct, et si tu es certain de ce que tu envoies par ton URL... je vois pas...

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Points : 58
    Points
    58
    Par défaut
    tu pourrais me détailler cette partie (je pense que c'est elle qui cloche) car j'ai du mal à la saisir complètement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	if( in_array( $aId, array_keys($arrayPanier)) ) {
    		$arrayPanier[$aId]+= $quantite;
    	} else {
    		$arrayPanier[$aId] = $quantite;
    	}
    PS : je fais ceci dans une seul et même page est ce que ça peut avoir une incidence ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2010] Comment créer tableau associatif
    Par aurelien76 dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/06/2013, 12h08
  2. [PHP 5.1] Créer un tableau associatif dynamique
    Par rolls dans le forum Langage
    Réponses: 9
    Dernier message: 04/05/2012, 12h10
  3. Réponses: 4
    Dernier message: 19/05/2010, 13h06
  4. array : créer un tableau associatif à la volée
    Par php_de_travers dans le forum Langage
    Réponses: 3
    Dernier message: 22/11/2009, 22h16
  5. [langage] Réinitialiser un tableau associatif.
    Par totox17 dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2003, 17h29

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