Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/01/2012, 14h15   #1
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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 :
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 :
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 :
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 !
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 16h13   #2
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 466
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

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

Informations forums :
Inscription : mai 2009
Messages : 466
Points : 655
Points : 655
Code :
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 />';
	}
}
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/01/2012, 16h29   #3
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
Bonjour et merci pour la fonction,

Cependant, il y a une erreur

Code :
Invalid argument supplied for foreach() in file /homepages/23/d281297373/htdocs/php/articles/commentaire/commentaire.php (157)
Sachant que cette ligne est :

Code :
foreach($value as $valeur)
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 17h03   #4
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 466
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

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

Informations forums :
Inscription : mai 2009
Messages : 466
Points : 655
Points : 655
Essai avec
Code :
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é
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 18h12   #5
Membre éclairé
 
Inscription : juin 2007
Messages : 337
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 337
Points : 393
Points : 393
Par défaut fonction au top : array_walk_recursive

Code :
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 :
if ( $key==$children && $item ==""){...}
__________________
Conception / Dev
ascito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 10h13   #6
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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 ?
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h07   #7
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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 :
1
2
3
4
5
 
if($key == 'id_commentaire')
{
      $id_commentaire = $item;
}
Merci.
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h38   #8
Membre éclairé
 
Inscription : juin 2007
Messages : 337
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 337
Points : 393
Points : 393
tu peu essayer un truc du style

Code :
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/>';
                }
 
            }
    }
__________________
Conception / Dev
ascito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 15h46   #9
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
Citation:
Envoyé par ascito Voir le message
tu peu essayer un truc du style

Code :
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
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 16h14   #10
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 10h27   #11
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
Je ne comprend pas pourquoi les données se mélangent.

Un petit coup de main serait le bienvenue, merci beaucoup
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h08   #12
Membre éclairé
 
Inscription : juin 2007
Messages : 337
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 337
Points : 393
Points : 393
et bien je ne comprends pas trop, je ne vois pas ou tu trouve que c'est mélangé en fait ?
__________________
Conception / Dev
ascito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h24   #13
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h36   #14
Membre éclairé
 
Inscription : juin 2007
Messages : 337
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 337
Points : 393
Points : 393
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 .
__________________
Conception / Dev
ascito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h49   #15
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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 :
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 :
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] => 
                        )
 
                )
 
        )
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 11h52   #16
Membre éclairé
 
Inscription : juin 2007
Messages : 337
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 337
Points : 393
Points : 393
oui, et le problème viens du fait que la réponse au message 1 apparait dans la variable children du second..
__________________
Conception / Dev
ascito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 12h07   #17
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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>
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 12h12   #18
Membre éclairé
 
Inscription : juin 2007
Messages : 337
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 337
Points : 393
Points : 393
Code :
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 ?
__________________
Conception / Dev
ascito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 12h15   #19
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
Je veux bien que tu m'éclaircisse l'esprit car je commence à m’embrouiller.

Ou vois tu le souci ?
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 12h21   #20
Membre éclairé
 
Inscription : juin 2007
Messages : 337
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 337
Points : 393
Points : 393
le bon tableau devrait être

Code :
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
 
 
        )
 
)
 
)
__________________
Conception / Dev
ascito est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h13.


 
 
 
 
Partenaires

Hébergement Web