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 :

Extraire que certains éléments d'un tableau


Sujet :

Langage PHP

  1. #1
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut Extraire que certains éléments d'un tableau
    Bonjour,

    Dans un tableau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cmp_payments = array(0 => 'CB', 1 => 'Chèque', 2 => 'Espèce', 3 => 'Paypal', 4 => 'Prélèvement', 5 => 'Virement');
    Que j'affiche dans un type select:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <select ...
        <?php
         if ($class->idVte) { 
           foreach ($cmp_payments as $id => $payment) {
             $selected_payment = ($class->getVente($gFc->idVte, 'vte_mode_paiement')==$id)?"selected":"";
        ?>  
        <option value="<?php echo $id; ?>" <?php echo $selected_payment; ?>><?php echo $payment; ?></option>
        <?php 
           }            
         }
        ?>
       </select>
    Mais sur certains select, je souhaite uniquement afficher certains élément de ce tableau et pas d'autres,

    Comme je débute depuis près de 20ans, un exemple est le bienvenue,
    merci d'avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Etant donné le petit nombre de valeurs, la meilleure solution serait d'avoir une liste pour chaque cas.

    Une alternative serait d'ajouter des conditions dans la boucle mais je trouve ça lourd en écriture pour pas grand chose.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    D'où cette réflexion...

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    l'autre soluce serait quelque chose dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // affiche : cb chq esp
    foreach (array_intersect_key($cmp_payments, [0, 1, 2]) as $k => $v)
    {
     
    }
     
    // affiche : cb prvlt vrt
    foreach (array_intersect_key($cmp_payments, [0, 4, 5]) as $k => $v)
    {
     
    }

  5. #5
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Merci, c'est exactement ce que je cherchais, mais cela me retourne une arreur de syntaxe niveau "["0, 4, 5]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach (array_intersect_key($cmp_payments, [0, 4, 5]) as $id => $payment)
    sinon ça retourne les 3 premiers

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    ton problème vient d'une différence de version de PHP.
    La (très pratique) syntaxe courte pour les tableaux [0, 4, 5] n'est disponible qu'à partir de PHP 5.4.0, avant cette version il faut utiliser array(0, 4, 5)

  7. #7
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Ma version est 5.4.12, j'ai aussi essayé array(3, 4, 5) , mais comme expliqué, cela retourne les trois premiers du tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cmp_payments = array(0 => 'CB', 1 => 'Chèque', 2 => 'Espèce', 3 => 'Paypal', 4 => 'Prélèvement', 5 => 'Virement');
    Soit : CB, Chèque, Paypal au lieu de : Paypal, Prélèvement, Virement,

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    c'était presque la bonne syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach (array_intersect_key($cmp_payments, [0 => true, 4 => true, 5 => true]) as $id => $payment)
    L'intersection porte sur les clés... et mon tableau [0, 4, 5] est équivalent à [0 => 0, 1 => 4, 2 => 5]... Je vais débrancher

  9. #9
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    Bonjour,

    Et merci pour la syntaxe, elle fonctionne bien mais comme ceci malgré ma version de php 5.4.12

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach (array_intersect_key($cmp_payments, array(0 => true, 2 => true, 3 => true)) as $id => $payment) {
    ...
    }
    ce qui est étonnant, c'est que ça fonctionne également comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach (array_intersect_key($cmp_payments, array(0 => 'toto', 2 => 'tata', 3 => 'mami')) as $id => $payment) {
    ...
    }
    Sans explication...

    Bonne journée,
    et merci.

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    L'intersection se fait sur les clefs (array_intersect_key), donc les valeurs n'ont pas d'importance.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre actif
    Inscrit en
    Février 2009
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 616
    Points : 249
    Points
    249
    Par défaut
    L'explication vient simplement du modèle de tableau choisi (avec ou sans clé)
    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $array = array("foo", "bar", "hello", "world");
    N'en a pas besoin,
    Cordialement

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Les tableaux ont toujours des clés.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Besoin d'aide pour n'extraire que certaines données
    Par Jean-Marc68 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/02/2008, 17h53
  2. Masquer certains éléments d'un tableau
    Par onirisme dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 04/12/2007, 17h01
  3. Réponses: 1
    Dernier message: 15/12/2006, 14h53
  4. Ne faire apparaître que certaine colonne d'un tableau
    Par zuzuu dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 20/07/2006, 14h23
  5. Réponses: 1
    Dernier message: 06/02/2006, 13h53

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