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 :

Trier un tableau $_POST [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut Trier un tableau $_POST
    Bonjour à tous,

    Voici le print_r d'un tableau $_POST :

    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
     
        [tel] => 00.00.00.00.00
        [nb_prods] => 4
     
     
        [id_prod] => Array
            (
                [0] => 158
                [1] => 1555
                [2] => 1537
                [3] => 1277
            )
     
        [reference] => Array
            (
                [0] => toto
                [1] => tata
                [2] => tutu
                [3] => titi
            )
     
        [prix] => Array
            (
                [0] => 0.50
                [1] => 23.34
                [2] => 13.60
                [3] => 8.73
            )
     
        [tva] => Array
            (
                [0] => 19.60
                [1] => 7.00
                [2] => 7.00
                [3] => 7.00
            )
     
        [livraison] => Array
            (
                [0] => tel
                [1] => exp
                [2] => exp
                [3] => exp
            )
    )
    Comment trier $_POST sur le sous-tableau $_POST['livraison'] ?
    Est-ce possible avec une fonction et uasort ?
    Merci de vos tuyaux.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 71
    Par défaut
    Je dirai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    asort($_POST['livraison']);
    Mais peux tu nous en dire plus sur ce que tu veux faire ?

  3. #3
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Bonsoir,

    Je doute que asort($_POST['livraison']); puisse trier $_POST , enfin tous ses sous-tableaux sur le critère des livraisons... C'est plus compliqué que ça.
    Tu vois que les sous_tableaux sont des produits, avec un id, un prix, un mode de livraison, et qu'ils sont au nombre de 4.

    Je veux qu'ils s'affichent ordonnés par la colonne "livraison". C'est à dire que le produit de livraison "tel" , dans l'exemple le 1er , référence "toto", s'affiche en dernier alors que c'est le premier a avoir été saisi dans le formulaire...

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    A mon avis, c'est la manière dont serait construit le formulaire qui n'irait, les classements ne correspondraient pas.

    Tu as des produits, et pour chaque produit devrait correspondre 1 identifiant, 1 référence, 1 prix, 1 tva et 1 mode de livraison.

    Pour exemple, construire le formulaire ainsi devrait améliorer les choses :
    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
     
    <form action="page.php" method="post">
    <!-- 1er produit -->
    <input type="text" name="produits[0]][id_prod]" value="" />
    <input type="text" name="produits[0]][reference]" value="" />
    <input type="text" name="produits[0][prix]" value="" />
    <input type="text" name="produits[0][tva]" value="" />
    <input type="text" name="produits[0][livraison]" value="" />
     
    <!-- 2ème produit -->
    <input type="text" name="produits[1]][id_prod]" value="" />
    <input type="text" name="produits[1]][reference]" value="" />
    <input type="text" name="produits[1][prix]" value="" />
    <input type="text" name="produits[1][tva]" value="" />
    <input type="text" name="produits[1][livraison]" value="" />
     
    </form>
    On obtiendra un tableau $_POST structuré ainsi :
    $_POST['produit'][0][id_prod] (1er produit, valeur : 158)
    etc ...

    Une boucle foreach sur $_POST['produit'] devrait te permettre d'obtenir chaque élément correspondant sans devoir faire de trie.

    De même qu'il n'y pas besoin de renseigner le nombre de produits dans le formulaire, un count($_POST['produits']) retournera ce nombre.


    Si chaque produit ayant un mode de livraison, et qu'une livraison contient un sous ensemble, et bien pareil, il suffit de structurer le formulaire afin d'obtenir un tableau à plusieurs dimensions.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <!-- 1er produit -->
    <input type="text" name="produits[0]][id_prod]" value="" />
    <input type="text" name="produits[0]][reference]" value="" />
    <input type="text" name="produits[0][prix]" value="" />
    <input type="text" name="produits[0][tva]" value="" />
     
    <input type="text" name="produits[0][livraison][sous_ensemble][0]" value="" />
    <input type="text" name="produits[0][livraison][sous_ensemble][1]" value="" />
    Suffit d'imbriquer une autre boucle foreach() sur $_POST['produits'][indice]['sous_ensemble'] dans la 1ère boucle afin d'obtenir les valeurs des sous ensembles du produit courant.


    Tout tient théoriquement dans la manière de structurer le formulaire.

  5. #5
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Bonjour, et merci de ta réponse

    Effectivement, mon formulaire n'est pas vraiment construit comme cela, car les champs sont générés dynamiquement avec Ajax en fonction d'un nombre de produits choisi par le user.
    Exemple : il choisit 4, j'affiche 4 "blocs" de formulaires vierges avec chacun référence, nom, prix, livraison...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <input type="text" name="reference[<?php echo $i; ?>]">
    <input type="text" name="prix[<?php echo $i; ?>]">
    ...
    Les champs "nom" sont en fait des listes déroulantes proposant toute la gamme et il choisit donc les 4 produits. En fonction du choix, toujours avec Ajax, tous les autres champs sont auto-remplis.
    Résultat : le tableau que j'ai mis en exemple dans le 1er post.
    Mais évidemment, l'ordre est toujours celui du choix du user.

    Et l'idée est que, au post du formulaire, les produits dont le champ "livraison" est à "tel" s'affichent en dessous de ceux dont le champ "livraison" est à "exp".
    Et j'aurais préféré ne pas changer toute la structure du formulaire...

  6. #6
    Membre chevronné Avatar de hariman
    Homme Profil pro
    Développeur Java, Android
    Inscrit en
    Janvier 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations professionnelles :
    Activité : Développeur Java, Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 200
    Par défaut
    Bonjour,

    Un simple tri à bulle devrait faire l'affaire, et lors de la permutation de 2 valeurs du sous-tableau "livraison", on permute aussi les valeurs correspondants dans les autres sous-tableau.

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

Discussions similaires

  1. [Débutant] Trier un tableau en 2 boucles
    Par SaladinDev dans le forum Assembleur
    Réponses: 9
    Dernier message: 07/05/2005, 23h38
  2. Trier un tableau par rapport à un autre tableau
    Par deaven dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 02/05/2005, 10h27
  3. [Débutant] Remplir et trier un tableau
    Par james-dean dans le forum Assembleur
    Réponses: 15
    Dernier message: 01/05/2005, 18h40
  4. Trier un tableau par ordre croissant
    Par Halleck dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 01/11/2004, 01h04
  5. trier un tableau et compter des elements du tableau
    Par remi51 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 17/06/2002, 17h51

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