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 :

ARRAY - convertir les colonnes / lignes


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut ARRAY - convertir les colonnes / lignes
    bonjour

    Issu d'une requête dans une bdd je dois manupiler un array suivant pour mieux l'exploiter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    array(   
    [col_1] => A, B, C
    [col_2] => D, E
    [col_3] => F, G, H, I
    )
    Je voudrai obtenir le tableau suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    array(
    [row_1] => A, D, F
    [row_2] => B, E, G
    [row_3] => C, "", H
    [row_4] => "" , "", I
    )

    comme vous le devinez ... je dois "convertir " le premier tableau dont les clés représentent les valeurs de colonnes ( col 1 _2 _3 ) en lignes ( row _1 _2 _3 _4 )

    Les colonnes n'ont pas forcément le même nombre d'éléments ( 4 pour la col_3 et seulement 2 pour la col_2 ) ce qui me donne au final un nombre de lignes par forcément égal au nombre de colonne.

    Au final ... je doit mettre mon tableau initial sous forme d'un tableau "genre excel" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                    col1    col2    col3
    ligne 1         A       D       F
    ligne 2         B       E       G
    ligne 3         C       -       -
    ligne 4         -       -       I
    z'avez une truc sympa ?
    je merdouille grave de mon coté .

    merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 131
    Par défaut tableau html
    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
    <?php
    $T = array(   
        'col_1' => ['A', 'B', 'C'],
        'col_2' => ['D', 'E'],
        'col_3' => ['F', 'G', 'H', 'I']
    );
     
    $count_rows = array_map('count', $T);
    rsort($count_rows);
    $count_rows = $count_rows[0];
    $cols = array_keys($T);
     
    echo '<table>';
    // colonnes
    echo '<tr>';
    echo '<td></td>';
    foreach ($cols as $col_name) echo '<td>', $col_name, '</td>';
    echo '</tr>', "\n";
     
    // lignes
    for ( $i=0; $i<$count_rows; $i ++) {
        echo '<tr>';
        echo '<td>Ligne ', ($i+1), '</td>';
        foreach ($T as $rows) {
            echo '<td>', (isset($rows[$i]) ? $rows[$i] : ''), '</td>';
        }
     
        echo '</tr>', "\n";
    }
    echo '</table>';

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    Ohhhhh ..merci +++
    ca marche très bien !

    j'ai regardé la doc de array_map ... je ne vois pas où tu as définit ta fonction "count" que tu passes en argument de array_map !
    est-ce une fonction standard interne a array_map ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    @selmouadin
    +1

    on peut remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $count_rows = array_map('count', $T);
    rsort($count_rows);
    $count_rows = $count_rows[0];
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $count_rows = max(array_map('count', $T)); // nombre MAX de colonnes
    et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            echo '<td>', (isset($rows[$i]) ? $rows[$i] : ''), '</td>';
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            echo '<td>', (isset($rows[$i]) ? $rows[$i] : '-'), '</td>'; // valeur, sinon "-" (tiret)
    (pour avoir les tirets)


    @french-petzouille

    la fonction count() existe en PHP.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    ah oui c'est encore plus joli...


    si je vous fait un print_r de mon array initial j'ai un aspect comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Array
    (
        [col_1] => 2,999,3
        [col_2] => 999,29,9
        [col_3] => 4,7,25
    )
    dans ce cas ... ca marche plus !
    doit falloir faire des trucs comme implode ou explode non ?

    en fait ...vos solutions sont OK si on a un array qui définit chaque colonne mais mon tableau initial est du genre :
    et non pas

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ce n'est pas ce que tu as donné comme "cahier des charges" dans ton 1er message...

    Donne-nous un exemple PLUS CONCRET (avec de "vraies" valeurs).

    ....Issu d'une requête dans une bdd....
    Montre-nous un exemple de requête SQL.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    merci pour ta réponse

    voila un exemple de ce qui est issu de la BDD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    a:4:{s:5:"col_1";s:5:"5,7,7";s:5:"col_2";s:8:"999,29,5";s:5:"col_3";s:3:"9,3";s:5:"col_4";s:1:"5";}

    un rubrique texte qui contient un array serialisé

    que je reconverti en array pour traitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Array
    (
        [col_1] => 5,7,7
        [col_2] => 999,29,5
        [col_3] => 9,3
        [col_4] => 5
    )

    merci

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/05/2018, 15h08
  2. Requête SQL : Afficher les colonnes en ligne, et vice versa
    Par paflolo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 17/03/2009, 09h16
  3. Impossible de convertir les sauts de lignes \n en <br> dans une jsp.
    Par michaelcourcy dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 28/11/2006, 17h32
  4. Réponses: 1
    Dernier message: 25/08/2006, 19h01
  5. [VBA-E] Séparer les colonnes d'une listbox par des lignes?
    Par mulot03 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/05/2006, 14h03

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