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 :

concaténer plusieurs tableaux selon des conditions


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2021
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 276
    Points : 23
    Points
    23
    Par défaut concaténer plusieurs tableaux selon des conditions
    Bonjour,

    je souhaite concaténer les données de plusieurs tableaux construits sur la même base, en un seul supertableau à 2 dimensions.
    Ça c'est facile (enfin, je veux dire, j'y suis parvenu).

    Voici un code PHP qui fait ça, en exemple.

    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
    <?php
     
     
          $tableau0 = 
            [
              "lat" => "latte0",
              "lon" => "lelong0",
            ] ;
     
     
          $tableau1 = 
            [
              "lat" => "talle1",
              "lon" => "lacourte1",
            ] ;
     
            $superTableau = 
            [
              $tableau0 ,
              $tableau1 ,
            ] ;
     
     
          print_r($superTableau);
          /* ça affiche
          Array ( [0] => Array ( [lat] => latte0 [lon] => lelong0 ) [1] => Array ( [lat] => talle1 [lon] => lacourte1 ) ) 
          */
     
        ?>
    Donc dans cet exemple, j'ai le $tableau0 (1 ligne, 2 colonnes) et le $tableau1 (1 ligne, 2 colonnes) , que j'assemble en un seul $superTableau (2 lignes, 2 colonnes).
    Dans mon vrai code il y a 6 colonnes par tableau et 5 tableaux au total, mais ça ne change pas le principe, donc autant simplifier pour le forum.
    Bref...

    Ce qui me pose difficulté c'est la partie du code qui rassemble les tableaux en superTableau ($superTableau = [ $tableau0 , $tableau1 , ] ;). Pourquoi ?
    Parce que parfois $tableau0 ou $tableau1 n'existe pas (dans mon exemple ils sont remplis en dur, mais en vrai c'est selon des conditions qui varient).
    Or, quand un tableau n'existe pas, j'ai besoin qu'il n'apparaisse pas dans superTableau. Pas du tout. Mais avec mon code, j'obtiens une ligne vide.
    Exemple, imaginez que $tableau0 soit vide. Mon code ($superTableau = [ $tableau0, $tableau1 , ] ;) va me donner

    Array ( [0] => [1] => Array ( [lat] => talle1 [lon] => lacourte1 ) )

    Et là, ce qui est en gras me pose un problème.
    J'aurais besoin que le résultat soit plutôt

    Array ([0] => Array ( [lat] => talle1 [lon] => lacourte1 ) )

    càd qu'il fasse comme si tableau0 n'avait jamais existé, génère une seule ligne, remonte les résultats de tabelau1 en ligne 0...

    Mais je ne sais pas intégrer des if dans le code $superTableau = [ $tableau0, $tableau1 , ] ;, ça met une erreur.

    Et si j'essaye de concaténer façon $superTableau ="" ; puis $superTableau .= $tableau0 ; et enfin $superTableau .= $tableau1 ; (ce qui me permettrait de mettre des if) le résultat concaténé ne fonctionne pas comme un tableau de tableau ça me donne juste ArrayArray.

    J'ai essayé merge mais çà ne marche pas non plus (mais je suppose que ça n'est pas fait pour ça).

    Bref, je ne sais pas comment mettre une condition à l'ajout de tel ou tel tableau à mon supertableau

  2. #2
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2021
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 276
    Points : 23
    Points
    23
    Par défaut
    Ne cherchez plus, je crois que qqun m'a donné la solution.
    Le temps de la tester proprement, et si ça marche je reviens donner le code.

  3. #3
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Et je crois que c'est moi...

  4. #4
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2021
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 276
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Et je crois que c'est moi...
    !



    Ouiiii !

    Et je vais donc ici le mettre sous forme de code « compréhensible par moi » (donc accessible a des presque-débutants (disons des gens qui débutent depuis une semaine)).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // la solution du dalmatien
    $dalmaTableau = []; // on déclare cette variable comme étant un tableau
     
    $t0_ok = "refuse" ; // je paramètre arbitrairement que le tableau 0 sera refusé
    $t1_ok = "accepte" ; // et le 1 sera accepté
     
    if ($t0_ok == "refuse") // si refuse, ne pas ajouter tableau0 à dalmaTableau
       {/*rien*/} else {$dalmaTableau[] = [ "lat" => "latte0", "lon" => "lelong0", ];}
     
    if ($t1_ok == "refuse") // si refuse, ne pas ajouter tableau1 à dalmaTableau
      {/*rien*/} else {$dalmaTableau[] = [ "lat" => "talle1", "lon" => "lacourte1" ];}
     
    echo "dalmaTableau = ";
    print_r($dalmaTableau);
    Et hop, le résultat est
    dalmaTableau = Array ( [0] => Array ( [lat] => talle1 [lon] => lacourte1 ) )

    yeah !

  5. #5
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Pour les conditions, on n'est pas obligé d'utiliser if... else..., si on n'a que le if à remplir :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ($t0_ok == "refuse") // si refuse, ne pas ajouter tableau0 à dalmaTableau
       {/*rien*/} else {$dalmaTableau[] = [ "lat" => "latte0", "lon" => "lelong0", ];}
    devient :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if ($t0_ok != "refuse") // si PAS refuse, on ajoute à dalmaTableau
    {
       $dalmaTableau[] = [ 
          "lat" => "latte0", 
          "lon" => "lelong0", 
       ];
    }

    ATTENTION : C'est une MAUVAISE idée de "condenser" le code, surtout pour un débutant.

    Il vaut mieux l’aérer et l'INDENTER :
    • c'est plus clair / lisible
    • et plus facile à déboguer

  6. #6
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2021
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 276
    Points : 23
    Points
    23
    Par défaut
    Oui, tu as raison, dans mon exemple simplifié, plutôt qu'un if (==) else il était plus simple de mettre un if (!=).
    J'étais resté à cette forme car dans mon code complet, la condition if est une double condition du genre ($truc == 0 && $machin == 0) et je ne savais pas comment la traiter en négatif.

    Et effectivement les codes bien déployés et avec de l'indentation et des commentaires. Là, je les avais resserrés pour que l'affichage dans le forum ne soit pas trop envahissant.

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par LoicBahuEtu Voir le message
    (donc accessible a des presque-débutants (disons des gens qui débutent depuis une semaine)).
    Et si on débute depuis 15 ans, on comprend

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/10/2018, 13h16
  2. Concaténer plusieurs lignes selon une condition
    Par AJ_ing dans le forum Shell et commandes GNU
    Réponses: 29
    Dernier message: 31/08/2012, 10h51
  3. Réponses: 4
    Dernier message: 22/06/2009, 19h14
  4. Concaténer plusieurs champs avec des valeurs uniques
    Par stefposs dans le forum VBA Access
    Réponses: 10
    Dernier message: 30/05/2007, 18h42
  5. [SQL Server 8] fonction Max --- selon des conditions
    Par Baquardie dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/01/2006, 22h06

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