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 en conservant les autres colonnes


Sujet :

Langage PHP

  1. #1
    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 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut trier un tableau en conservant les autres colonnes
    Bonjour,

    j'ai un tableau avec N lignes et 3 colonnes.
    Une des 3 colonnes comporte beaucoup de doublons.
    Je voudrais donc extraire les valeurs uniques de cette colonne (supprimer les doublons)(ça, je sais faire, avec array_unique), mais construire aussi 2 tableaux qui comporteraient la liste des valeurs dans les autres colonnes correspondants à ces valeurs (sur la même ligne).

    Un exemple pour clarifier mon besoin.

    Tableau de départ :
    val1 val2   val3
    val1 val4   val5
    val1 val6   val7
    val8 val9   val10
    val1 val11  val12
    
    Ce que je voudrais obtenir :
    val1 : [val2 val4 val6 val11] et [val3 val5 val7 val10]
    val8 : [val9] et [val10]
    
    Comment faire SVP ?

  2. #2
    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
    Bonjour Laurent,

    RIEN compris....

    Montre un exemple avec des ARRAY PHP (array de départ et ce que tu veux obtenir).

  3. #3
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    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
    <?php
     
    $data = [
        ['val1', 'val2', 'val3'],
        ['val1', 'val4', 'val5'],
        ['val1', 'val6', 'val7'],
        ['val8', 'val9', 'val10'],
        ['val1', 'val11', 'val12'],
    ];
     
    $result = [];
    foreach ($data as $row) {
        if (!isset($result[$row[0]])) {
            $result[$row[0]][0] = [];
            $result[$row[0]][1] = [];
        }
        $result[$row[0]][0][] = $row[1];
        $result[$row[0]][1][] = $row[2];
    }
     
    print_r($result);
    Donne :

    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
    Array (
        [val1] => Array (
            [0] => Array (
                [0] => val2
                [1] => val4
                [2] => val6
                [3] => val11
            )
            [1] => Array (
                [0] => val3
                [1] => val5
                [2] => val7
                [3] => val12
            )
        )
        [val8] => Array (
            [0] => Array (
                [0] => val9
            )
            [1] => Array (
                [0] => val10
            )
        )
    )

  4. #4
    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 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Merci pour la proposition.
    Ce soir, j'ai pas les idées claires et ne parviens pas à comprendre. J'y reviendrais demain matin.

  5. #5
    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 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Bonjour Séb.,

    j'ai mis le temps, mais j'ai réussi à comprendre ta solution (remarquable car ultra-concise). Par contre, ton tableau de départ est du type : array de array de string et le mien est de type array de array de array (en fait, l'array de bas niveau est très simple : il s'agit d'un array d'une seule cellule de type string). On est pas loin de ton point de départ. Voici le début de mon tableau :
    .
    array(50) { [0]=> array(3) { ["sesaid"]=> array(1) { [0]=> string(0) "" } ["appliname"]=> array(1) { [0]=> string(6) "bridge" } ["errorname"]=> array(1) { [0]=> string(60) " is not in a valid format for SESA (SESA12345 or SESA123456)" } } [1]=> array(3) { ["sesaid"]=> array(1) { [0]=> string(0) "" } ["appliname"]=> array(1) { [0]=> string(6) "bridge" } ["errorname"]=> array(1) { [0]=> string(41) "column country ("") This cell is empty" } }....
    Néanmoins, je n'arrive pas à convertir mon tableau dans ta structure pour utiliser ton code. Pourrais-tu m'y aider ?

  6. #6
    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
    @Seb.

    Tu vois ce que je voulais dire ?...

  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 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Ma structure n'est certes pas académique mais je l'hérite du reste du code, et je préfère travailler avec plutôt que toucher au reste du code.

  8. #8
    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
    Laurent,
    Séb. t'a fourni la réponse à ta question, TELLE que tu l'as posée.


    C'est A TOI de nous fournir un code/array UTILISABLE et TESTABLE.

  9. #9
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Par contre, ton tableau de départ est du type : array de array de string
    Oui, tel que tu l'avais montré.

    et le mien est de type array de array de array (en fait, l'array de bas niveau est très simple : il s'agit d'un array d'une seule cellule de type string).
    Et bien cela donnerait ceci :

    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
    <?php
     
    $data = [
        [['val1'], ['val2'], ['val3']],
        [['val1'], ['val4'], ['val5']],
        [['val1'], ['val6'], ['val7']],
        [['val8'], ['val9'], ['val10']],
        [['val1'], ['val11'], ['val12']],
    ];
     
    $result = [];
    foreach ($data as $row) {
        if (!isset($result[$row[0][0]])) {
            $result[$row[0][0]][0] = [];
            $result[$row[0][0]][1] = [];
        }
        $result[$row[0][0]][0][] = $row[1][0];
        $result[$row[0][0]][1][] = $row[2][0];
    }
     
    print_r($result);
    Pour le fond je rejoinds jreaux, il faut donner ce genre d'infos dès le début.

    Si cela ne convient toujours pas il faudra donner un jeu de données en entrée et en sortie.

  10. #10
    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 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    il faudra donner un jeu de données en entrée et en sortie.
    C'est ce que j'avais commencé à faire avant de te lire.

    A mon avis, ta solution fonctionne. Pour le vérifier, j'ai introduit des données réelles dans ton code et vérifié le résultat :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?php
     
    $data = [
        [['is not in a valid format for SESA (SESA12345 or SESA123456)'], [''], ['bridge']],
        [['column country ("") This cell is empty'], [''], ['bridge']],
        [['BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)'], ['BMC_WS_CORDYS'], ['Active Directory']],
        [['BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)'], ['BMC_WS_CORDYS'], ['Outlook']],
        [['BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)'], ['BMC_WS_CORDYS'], ['Active Directory']],
        [['BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)'], ['BMC_WS_CORDYS'], ['bridge']],
        [['BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)'], ['BMC_WS_CORDYS'], ['bridge']],
         [['BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)'], ['BMC_WS_CORDYS'], ['Box']],
        [['BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)'], ['BMC_WS_CORDYS'], ['bridge']],
        [['BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)'], ['BMC_WS_CORDYS'], ['Outlook']]
    ];
     
    $result = [];
    foreach ($data as $row) {
        if (!isset($result[$row[0][0]])) {
            $result[$row[0][0]][0] = [];
            $result[$row[0][0]][1] = [];
        }
        $result[$row[0][0]][0][] = $row[1][0];
        $result[$row[0][0]][1][] = $row[2][0];
    }
     
    //print_r($result);
    echo "<br/><br/>";
    $line = 1;
    foreach($result as $one_line)
    {
        echo "<br/>line ".$line++;
        $line_cell = 1;
        foreach($one_line as $one_cell){
            echo "<br/>line_cell ".$line_cell++."<br/>";
            var_dump($one_cell);
            echo "<br/>";
        }
    }
    Je préfère ma façon d'afficher le résultat, plus claire que ton print_r:
    line 1
    line_cell 1
    array(1) { [0]=> string(0) "" }

    line_cell 2
    array(1) { [0]=> string(6) "bridge" }

    line 2
    line_cell 1
    array(1) { [0]=> string(0) "" }

    line_cell 2
    array(1) { [0]=> string(6) "bridge" }

    line 3
    line_cell 1
    array(8) { [0]=> string(13) "BMC_WS_CORDYS" [1]=> string(13) "BMC_WS_CORDYS" [2]=> string(13) "BMC_WS_CORDYS" [3]=> string(13) "BMC_WS_CORDYS" [4]=> string(13) "BMC_WS_CORDYS" [5]=> string(13) "BMC_WS_CORDYS" [6]=> string(13) "BMC_WS_CORDYS" [7]=> string(13) "BMC_WS_CORDYS" }

    line_cell 2
    array(8) { [0]=> string(16) "Active Directory" [1]=> string(7) "Outlook" [2]=> string(16) "Active Directory" [3]=> string(6) "bridge" [4]=> string(6) "bridge" [5]=> string(3) "Box" [6]=> string(6) "bridge" [7]=> string(7) "Outlook" }
    Ca a l'air bon. Ce qui me reste à faire, c'est l'adapter à mon code. Si problème, je reviendrai.

  11. #11
    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 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Bonsoir,
    j'ai adapté ton code au mien, et j'ai des soucis :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var_dump($tab);
     
    foreach ($tab as $row) {
                if (!isset($result[$row[0][0]])) {
                    $result[$row[0][0]][0] = [];
                    $result[$row[0][0]][1] = [];
                }
                $result[$row[0][0]][0][] = $row[1][0];
                $result[$row[0][0]][1][] = $row[2][0];
    }
     
    //print_r($result);


    Le var_dump du tableau d'entrée $tab:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(10) { [0]=> array(3) { ["sesaid"]=> array(1) { [0]=> string(0) "" } ["appliname"]=> array(1) { [0]=> string(6) "bridge" } ["errorname"]=> array(1) { [0]=> string(60) " is not in a valid format for SESA (SESA12345 or SESA123456)" } } [1]=> array(3) { ["sesaid"]=> array(2) { [0]=> string(0) "" [1]=> string(0) "" } ["appliname"]=> array(2) { [0]=> string(6) "bridge" [1]=> string(6) "bridge" } ["errorname"]=> array(2) { [0]=> string(41) "column country ("") This cell is empty" [1]=> string(40) "this country does not exist in SQL table" } } [2]=> array(3) { ["sesaid"]=> array(1) { [0]=> string(13) "BMC_WS_CORDYS" } ["appliname"]=> array(1) { [0]=> string(16) "Active Directory" } ["errorname"]=> array(1) { [0]=> string(73) "BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)" } } [3]=> array(3) { ["sesaid"]=> array(1) { [0]=> string(13) "BMC_WS_CORDYS" } ["appliname"]=> array(1) { [0]=> string(7) "Outlook" } ["errorname"]=> array(1) { [0]=> string(73) "BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)" } } [4]=> array(3) { ["sesaid"]=> array(1) { [0]=> string(13) "BMC_WS_CORDYS" } ["appliname"]=> array(1) { [0]=> string(16) "Active Directory" } ["errorname"]=> array(1) { [0]=> string(73) "BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)" } } [5]=> array(3) { ["sesaid"]=> array(1) { [0]=> string(13) "BMC_WS_CORDYS" } ["appliname"]=> array(1) { [0]=> string(6) "bridge" } ["errorname"]=> array(1) { [0]=> string(73) "BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)" } } [6]=> array(3) { ["sesaid"]=> array(1) { [0]=> string(13) "BMC_WS_CORDYS" } ["appliname"]=> array(1) { [0]=> string(6) "bridge" } ["errorname"]=> array(1) { [0]=> string(73) "BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)" } } [7]=> array(3) { ["sesaid"]=> array(1) { [0]=> string(13) "BMC_WS_CORDYS" } ["appliname"]=> array(1) { [0]=> string(3) "Box" } ["errorname"]=> array(1) { [0]=> string(73) "BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)" } } [8]=> array(3) { ["sesaid"]=> array(1) { [0]=> string(13) "BMC_WS_CORDYS" } ["appliname"]=> array(1) { [0]=> string(6) "bridge" } ["errorname"]=> array(1) { [0]=> string(73) "BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)" } } [9]=> array(3) { ["sesaid"]=> array(1) { [0]=> string(13) "BMC_WS_CORDYS" } ["appliname"]=> array(1) { [0]=> string(7) "Outlook" } ["errorname"]=> array(1) { [0]=> string(73) "BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)" } } }
    J'ai laissé l'affichage avec le var_dump, même si c'est moins clair, mais pour bien montrer que c'est un tableau associatif et non numérique.

    Le souci, c'est qu'on a plein de warnings du type :
    Warning: Undefined array key 0 in C:\projets\ticket_rawsrc\src\view\block\DisplayErrors.php on line 39
    La ligne 39 est ici la ligne 4. Comment corriger ça, STP ?

  12. #12
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    Désolé
    1. Je ne lis pas les var_dump() que je trouve illisibles (surtout quand présentés sur 1 ligne)
    2. Tu ne donnes pas ton code
    3. Tu ne donnes pas de cas à tester
    Dur de t'aider davantage

  13. #13
    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
    Laurent,

    tu n'as toujours pas compris qu'on a besoin de CODES/ARRAYS TESTABLES !

    Les tiens sont... DÉTESTABLES !!

  14. #14
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    Fonction utile pour obtenir le code d'initialisation d'un tableau => var_export() https://www.php.net/var_export

  15. #15
    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 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    je ne vous lis que ce matin.

    Voici mon tableau de départ (utilisable) :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    <?php
    array (
        0 =>
            array (
                'sesaid' =>
                    array (
                        0 => '',
                    ),
                'appliname' =>
                    array (
                        0 => 'bridge',
                    ),
                'errorname' =>
                    array (
                        0 => ' is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        1 =>
            array (
                'sesaid' =>
                    array (
                        0 => '',
                        1 => '',
                    ),
                'appliname' =>
                    array (
                        0 => 'bridge',
                        1 => 'bridge',
                    ),
                'errorname' =>
                    array (
                        0 => 'column country ("")    This cell is empty',
                        1 => 'this country does not exist in SQL table',
                    ),
            ),
        2 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'Active Directory',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        3 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'Outlook',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        4 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'Active Directory',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        5 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'bridge',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        6 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'bridge',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        7 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'Box',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        8 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'bridge',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        9 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'Outlook',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
    );
    je ne comprends pas pourquoi, mais en affichant le code source de ma page, j'obtiens ce code (donc du PHP). J'ai d'abord essayé var_export mais ça donnait la même chose qu'un var_dump.

    Mon code est :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    <?php
    $tab = array (
        0 =>
            array (
                'sesaid' =>
                    array (
                        0 => '',
                    ),
                'appliname' =>
                    array (
                        0 => 'bridge',
                    ),
                'errorname' =>
                    array (
                        0 => ' is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        1 =>
            array (
                'sesaid' =>
                    array (
                        0 => '',
                        1 => '',
                    ),
                'appliname' =>
                    array (
                        0 => 'bridge',
                        1 => 'bridge',
                    ),
                'errorname' =>
                    array (
                        0 => 'column country ("")    This cell is empty',
                        1 => 'this country does not exist in SQL table',
                    ),
            ),
        2 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'Active Directory',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        3 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'Outlook',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        4 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'Active Directory',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        5 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'bridge',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        6 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'bridge',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        7 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'Box',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        8 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'bridge',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        9 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'Outlook',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
    );
     
     
    foreach ($tab as $row) {
        if (!isset($result[$row[0][0]])) {
            $result[$row[0][0]][0] = [];
            $result[$row[0][0]][1] = [];
        }
        $result[$row[0][0]][0][] = $row[1][0];
        $result[$row[0][0]][1][] = $row[2][0];
    }
     
    //print_r($result);

    A mon avis, comme le tableau est partiellement associatif, il faut utiliser quelque part la syntaxe foreach($tab AS $key=>$value) mais je n'y arrive pas...

  16. #16
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    Billets dans le blog
    17
    Par défaut
    Cela donnerait ceci.

    Par contre attention, contrairement à ce que tu as dit plus haut il y a parfois des entrées qui ont plus de 1 élément, ex. $tab[1]['sesaid'] (et ses ptits copains) contient 2 éléments.

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    <?php
     
    $tab = array (
        0 =>
            array (
                'sesaid' =>
                    array (
                        0 => '',
                    ),
                'appliname' =>
                    array (
                        0 => 'bridge',
                    ),
                'errorname' =>
                    array (
                        0 => ' is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        1 =>
            array (
                'sesaid' =>
                    array (
                        0 => '',
                        1 => '',
                    ),
                'appliname' =>
                    array (
                        0 => 'bridge',
                        1 => 'bridge',
                    ),
                'errorname' =>
                    array (
                        0 => 'column country ("")    This cell is empty',
                        1 => 'this country does not exist in SQL table',
                    ),
            ),
        2 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'Active Directory',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        3 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'Outlook',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        4 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'Active Directory',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        5 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'bridge',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        6 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'bridge',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        7 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'Box',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        8 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'bridge',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
        9 =>
            array (
                'sesaid' =>
                    array (
                        0 => 'BMC_WS_CORDYS',
                    ),
                'appliname' =>
                    array (
                        0 => 'Outlook',
                    ),
                'errorname' =>
                    array (
                        0 => 'BMC_WS_CORDYS is not in a valid format for SESA (SESA12345 or SESA123456)',
                    ),
            ),
    );
     
    $result = [];
    foreach ($tab as $row) {
        if (!isset($result[$row['sesaid'][0]])) {
            $result[$row['sesaid'][0]]['appliname'] = [];
            $result[$row['sesaid'][0]]['errorname'] = [];
        }
        $result[$row['sesaid'][0]]['appliname'][] = $row['appliname'][0];
        $result[$row['sesaid'][0]]['errorname'][] = $row['errorname'][0];
    }
     
    print_r($result);

  17. #17
    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 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Par contre attention, contrairement à ce que tu as dit plus haut il y a parfois des entrées qui ont plus de 1 élément, ex. $tab[1]['sesaid'] (et ses ptits copains) contient 2 éléments.
    En effet et j'y avais pas fait attention en donnant le code ; ceci est le révélateur d'un bug dans mon code...

    Sinon,

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

Discussions similaires

  1. trier un tableau en conservant l index
    Par turf_trader dans le forum Delphi
    Réponses: 8
    Dernier message: 27/06/2007, 21h55
  2. Réponses: 4
    Dernier message: 13/04/2007, 17h32
  3. Réponses: 5
    Dernier message: 02/04/2007, 17h49
  4. Comment trier un tableau, et repérer les doublon?
    Par danje dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 18h45
  5. 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, 09h27

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