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

PHP & Base de données Discussion :

Exploitation d'un array imbriqué [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut Exploitation d'un array imbriqué
    Bonjour,

    J'ai deux fonctions qui me permettent de récupérer les commentaires d'un article ainsi que les commentaires qui commentent le commentaire.

    Ainsi, par exemple, je me retrouve avec trois commentaires dont un qui commente un commentaire.

    je me retrouve avec un array contenant :

    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
    Array
    (
        [0] => Array
            (
                [id_commentaire] => 36
                [u_id] => 18
                [commentaire_titre] => Mon message
                [commentaire_contenu] => 
     
    super trek !!!
     
    ça fait envie tout de même, pour vous rassurer nous aussi dans les pyrénées nous manquons énormément de neige....cette année ne semble pas être une bonne saison hivernale.
     
    Mais heureusement les paysages sont toujours la pour alimenter notre regard Rigolant
     
                [commentaire_timestamp] => 1298326740
                [children] => 
            )
     
        [1] => Array
            (
                [id_commentaire] => 37
                [u_id] => 2
                [commentaire_titre] => Un super Vercors
                [commentaire_contenu] => 
     
    Salut,
     
     
     
    Super joli le Vercors. Nous pensons y retourner pendant l'été car le calcaire y est superbe et les vues excellentes.
     
    Nous conseillons fortement la traversée de la réserve naturelle !
     
    @+Sourire et merci pour tes commentaires.
     
                [commentaire_timestamp] => 1298359980
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id_commentaire] => 36
                                [u_id] => 18
                                [commentaire_titre] => Mon message
                                [commentaire_contenu] => 
     
    super trek !!!
     
    ça fait envie tout de même, pour vous rassurer nous aussi dans les pyrénées nous manquons énormément de neige....cette année ne semble pas être une bonne saison hivernale.
     
    Mais heureusement les paysages sont toujours la pour alimenter notre regard Rigolant
     
                                [commentaire_timestamp] => 1298326740
                                [children] => 
                            )
     
                    )
     
            )
     
    )
    Pour exploiter ces informations, j'ai essayé un foreach imbriqué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    foreach($test as $key => $value )
    	{
    	  echo $key . ': <br />';
     
    	  foreach( $value as $valeur )
    		echo '  ' . $valeur . '<br />';
     
    	  echo '<br />';
    	}
    Qui me retourne :

    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
    0:
    36
    18
    Mon message
     
    super trek !!!
     
    ça fait envie tout de même, pour vous rassurer nous aussi dans les pyrénées nous manquons énormément de neige....cette année ne semble pas être une bonne saison hivernale.
     
    Mais heureusement les paysages sont toujours la pour alimenter notre regard Rigolant
     
    1298326740
     
     
    1:
    37
    2
    Un super Vercors
     
    Salut,
     
     
     
    Super joli le Vercors. Nous pensons y retourner pendant l'été car le calcaire y est superbe et les vues excellentes.
     
    Nous conseillons fortement la traversée de la réserve naturelle !
     
    @+Sourire et merci pour tes commentaires.
     
    1298359980
    Array
    On remarque alors que seul les commentaires "basiques" sont retournés.

    Comment puis-je faire pour récupérer les commentaires commenté ?

    Merci !

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function print_msg($test)
    {
    	foreach($test as $key => $value )
    	{
    		if ($key == "children" && is_array($value))
    			print_msg($value);
     
    		echo $key . ': <br />';
    		foreach( $value as $valeur )
    			echo '  ' . $valeur . '<br />';
     
    		echo '<br />';
    	}
    }

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Bonjour et merci pour la fonction,

    Cependant, il y a une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Invalid argument supplied for foreach() in file /homepages/23/d281297373/htdocs/php/articles/commentaire/commentaire.php (157)
    Sachant que cette ligne est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach($value as $valeur)

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Essai avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function print_msg($test)
    {
    	foreach($test as $key => $value )
    	{
    		if ($key == "children" && is_array($value))
    			print_msg($value);
     
    		echo $key . ': <br />'; echo '  ' . $valeur . '<br />';
     
    		echo '<br />';
    	}
    }
    Ou si tu peut m'envoyé un array en php que je puisse testé

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut fonction au top : array_walk_recursive
    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
    <?php
    Class Commentaire_filter{
                static function test_print($item, $key)
                {
                echo "$key : $item\n<br/>";
                }
         }
     
    $Commentaire =
    Array(
        0=> Array(
                "id_commentaire" => 36,
                "u_id" => 2,
                "commentaire_titre" =>' Mon message',
                "commentaire_contenu" => 'Super trek !!! ',
                "commentaire_timestamp" => 1298326740,
                "children" => ""
        ),
        1=> Array(
                "id_commentaire" => 37,
                "u_id" => 14,
                "commentaire_titre" =>'Un super Vercors',
                "commentaire_contenu" => 'Super joli le Vercors.',
                "commentaire_timestamp" => 1298359980,
                "children" => Array
                            (
                            0  => Array
                               (
                                   "id_commentaire" => 38,
                                   "u_id" => 18,
                                   "commentaire_titre"=>  "Mon message" ,
                                   "commentaire_contenu" => "ça fait envie tout de même,",
                                   "commentaire_timestamp" => 1298326740,
                                   "children" => ""
                               )
                            )
                )
        );
     
     
     array_walk_recursive($Commentaire, 'Commentaire_filter::test_print');
       ?>

    Avec ca tu peu par par exemple tester si la variable $children et vide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( $key==$children && $item ==""){...}

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Bonjour Ascito et merci pour cette proposition qui semble fonctionner à merveille

    Pourrais-tu me dire comment, d'une manière simple et efficace, je pourrais mettre le résultat en œuvre pour mettre en avant le message d'origine et le ou les messages cités. Faut-il utiliser la balise blockquote ou uniquement du CSS ?

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Autre question,

    Comment puis-je exploiter les données en les récupérant dans une variable ?

    parce que je ne trouve pas très brillant de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if($key == 'id_commentaire')
    {
          $id_commentaire = $item;
    }
    Merci.

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    tu peu essayer un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Class Commentaire_filter
        {
                static function test_print($item, $key)
                {
                $array =  Array($key=>$item) ;
                print_r($array);
                echo'<br/>';
                extract( $array ); 
                    if(isset($commentaire_titre)){
                        echo $commentaire_titre.'<br/>';
                    }
     
                }
        }

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Citation Envoyé par ascito Voir le message
    tu peu essayer un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Class Commentaire_filter
        {
                static function test_print($item, $key)
                {
                $array =  Array($key=>$item) ;
                print_r($array);
                echo'<br/>';
                extract( $array ); 
                    if(isset($commentaire_titre)){
                        echo $commentaire_titre.'<br/>';
                    }
     
                }
        }
    Super, merci pour ton aide

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Après analyse, il semblerait que les données soient mélanger suite à l'extract.

    C'est à dire que l'id_commentaire bascule de l'un à l'autre par exemple.

    Comment cela peut-il se produire ?

    On peut regarder le phénomène sur

    http://www.partir-en-vtt.com/php/art...ommentaire.php

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Je ne comprend pas pourquoi les données se mélangent.

    Un petit coup de main serait le bienvenue, merci beaucoup

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    et bien je ne comprends pas trop, je ne vois pas ou tu trouve que c'est mélangé en fait ?

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    J'avais l'impression qu'il y avait un mélange mais je n'en suis plus tellement sûr. je dois avoir des difficultés à trouver la séparation des différents message et du message cité.

    Comment, pourrais-je montrer l'arborescence en HTML ?

    Dans ce cas là, nous avons deux message dont un qui cite l'autre. De ce fait, j'aimerais afficher que les deux messages et en blocquote, le message cité en dessous du message le citant.

    par avance, merci pour le coup de main ascito

  14. #14
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    A mon avis ton problème viens du fait que le message de réponse au premier apparait dans le children du second ( à en voir les numéros [id_commentaire] => 36 et [u_id] => 18), alors tu as tu plusieurs solutions :

    ton script php ne range pas les commentaires 2em niveaux dans le bon children 1er niveau

    ta requête SQL de récupération des données n'est pas bonne

    ta boucle de récupération des données n'est pas bonne

    A mon avis tu devrais corriger cela, cependant, il t'es toujours possible de te servir de ma fonction pour les réordonner correctement en créant un tableau intermédiaire réorganisant correctement les children par id, puis de les afficher dans le bon ordre .

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Si l'on regarde le premier array que j'affiche sur la page que j'ai mentionnée un peu plus haut, je remarque que tout est ok.

    Le premier message est le suivant :

    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
        [0] => Array
            (
                [id_commentaire] => 36
                [u_id] => 18
                [commentaire_titre] => Mon message
                [commentaire_contenu] => 
     
    super trek !!!
     
    ça fait envie tout de même, pour vous rassurer nous aussi dans les pyrénées nous manquons énormément de neige....cette année ne semble pas être une bonne saison hivernale.
     
    Mais heureusement les paysages sont toujours la pour alimenter notre regard Rigolant
     
                [commentaire_timestamp] => 1298326740
                [u_nickname] => lolo
                [children] => 
            )
    le second message cite le premier message ici :

    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
       [1] => Array
            (
                [id_commentaire] => 37
                [u_id] => 2
                [commentaire_titre] => Un super Vercors
                [commentaire_contenu] => 
     
    Salut,
     
     
     
    Super joli le Vercors. Nous pensons y retourner pendant lété car le calcaire y est superbe et les vues excellentes.
     
    Nous conseillons fortement la traversée de la réserve naturelle !
     
    @+Sourire et merci pour tes commentaires.
     
                [commentaire_timestamp] => 1298359980
                [u_nickname] => Loïc
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id_commentaire] => 36
                                [u_id] => 18
                                [commentaire_titre] => Mon message
                                [commentaire_contenu] => 
     
    super trek !!!
     
    ça fait envie tout de même, pour vous rassurer nous aussi dans les pyrénées nous manquons énormément de neige....cette année ne semble pas être une bonne saison hivernale.
     
    Mais heureusement les paysages sont toujours la pour alimenter notre regard Rigolant
     
                                [commentaire_timestamp] => 1298326740
                                [u_nickname] => lolo
                                [children] => 
                            )
     
                    )
     
            )

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    oui, et le problème viens du fait que la réponse au message 1 apparait dans la variable children du second..

  17. #17
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Non je crois que c'est normal



    Message 1 :

    Salut c'est moi


    Message deux citant le message 1 :

    Super toi, moi c'est moi

    <blockquote>Salut c'est moi</blockquote>

  18. #18
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    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
    (
        [0] => Array
            (
                [id_commentaire] => 36
                [u_id] => 18
                [commentaire_titre] => Mon message
             )
     
        [1] => Array
            (
                [id_commentaire] => 37
                [u_id] => 2
                [commentaire_titre] => Un super Vercors
                 [children] => Array
                    (
                        [0] => Array
                            (
                                [id_commentaire] => 36
                                [u_id] => 18
                                [commentaire_titre] => Mon message
     
                            )
     
                    )
     
            )
     
    )
    tu es sur que rien ne te choque ?

  19. #19
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Je veux bien que tu m'éclaircisse l'esprit car je commence à m’embrouiller.

    Ou vois tu le souci ?

  20. #20
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    le bon tableau devrait être

    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
    (
        (
        [0] => Array
            (
                [id_commentaire] => 36
                [u_id] => 18
                [commentaire_titre] => Mon message
                [commentaire_timestamp] => 1298326740
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id_commentaire] => 36
                                [u_id] => 18
                                [commentaire_titre] => Mon message
                                [commentaire_timestamp] => 1298326740
                                [children] => 
                            )
     
                    )
            )
     
        [1] => Array
            (
                [id_commentaire] => 37
                [u_id] => 2
                [commentaire_titre] => Un super Vercors
                [commentaire_timestamp] => 1298359980
                [u_nickname] => Loïc
     
     
            )
     
    )
     
    )

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Tri array imbriqué
    Par chouchouilloux dans le forum Langage
    Réponses: 4
    Dernier message: 01/11/2012, 00h01
  2. [XL-2003] arrays imbriquées ?
    Par fb62840 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 02/05/2012, 16h20
  3. Réponses: 2
    Dernier message: 26/05/2011, 17h43
  4. [PHP 4] array imbriqué : afficher les numéros de ligne d'un menu arborescent
    Par PHPdudimanche dans le forum Langage
    Réponses: 1
    Dernier message: 12/01/2009, 15h28
  5. [cr 8.5] comment exploiter les données d'un "array"
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 12
    Dernier message: 09/06/2005, 15h03

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