Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 07/02/2012, 11h47   #1
Membre du Club
 
Inscription : mai 2007
Messages : 209
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 209
Points : 50
Points : 50
Par défaut Additionner résultats d'une fonction récursive

Bonjour,
Voila j'ai une fonction récursive qui me permet de connaitre le nombre d'articles par famille.
Mais j'aimerais que l'ensemble des résultats soit additionné.
Actuellement ma fonction et comme cela :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
function ttarticles($parent, $niveau, $array)
{
    foreach ($array AS $noeud)
    {
	    if ($parent == $noeud['parent_id'])
	    {
		$html.= $noeud['nb_articles'];
		$html.= ttarticles($noeud['categorie_id'], ($niveau + 1), $array);
	    }
}
cela me retourne : 011110000
Alors que j'aimerais avoir comme résultat : 4

Merci de votre aide
christobale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 11h51   #2
Membre éclairé
 
Avatar de keaton7
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 320
Points : 320
Bonjour,

Sois tu rajoute un paramètre (meilleure solution à mon avis), sois tu utilises des variables globales.

En espérant que ça t'aide
__________________
Spécialité : Développement WEB
Indispensables : Doc PHP ~ Doc MySQL ~ w3schools ~ validateurs W3C ~ Google Adwords

keaton7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 11h57   #3
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 808
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 808
Points : 35 786
Points : 35 786
Dans ton code, à quel moment tu additionnes quoi que ce soit ?
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 12h21   #4
Membre du Club
 
Inscription : mai 2007
Messages : 209
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 209
Points : 50
Points : 50
keaton7 => je ne comprend pas très bien ton idée de nouveau paramètre !

Bovino => pour l'instant je ne somme rien vue que je ne sais pas comme procéder et que je demande de l'aide.
Ceci dit j'ai fait ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
	function ttarticles($parent, $niveau, $array)
	{
	    $html=array();
 
	    foreach ($array AS $noeud)
	    {
		    if ($parent == $noeud['parent_id'])
		    {
			$html[] = $noeud['nb_articles'];
			ttarticles($noeud['categorie_id'], ($niveau + 1), $array);
		    }
	    }
	    $html = array_sum($html);
	    print_r($html);
	}
Mais le résultat est : 0000040000
Donc toujours pas ce que je cherche.
christobale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 13h17   #5
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 554
Points : 2 554
Envoyer un message via Skype™ à rawsrc
Bonjour,
tu pourrais poster un jeu de données exemple, stp.
Sinon tu codes sous PHP 5.3+ ?
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 14h08   #6
Membre éclairé
 
Avatar de keaton7
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 320
Points : 320
Bah un genre de :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function ttarticles($parent, $niveau, $array, $count=0)
	{
	    $html=array();
 
	    foreach ($array AS $noeud)
	    {
		    if ($parent == $noeud['parent_id'])
		    {
			$html[] = $noeud['nb_articles'];
			$count=ttarticles($noeud['categorie_id'], ($niveau + 1), $array,$count+$noeud['nb_articles']);
		    }
	    }
	    $html = array_sum($html);
	    print_r($html);
            return $count;
	}

ou alors

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function ttarticles($parent, $niveau, $array, &$count)
	{
 
	    $html=array();
 
	    foreach ($array AS $noeud)
	    {
		    if ($parent == $noeud['parent_id'])
		    {
			$html[] = $noeud['nb_articles'];
                        $count+= $noeud['nb_articles'];
			ttarticles($noeud['categorie_id'], ($niveau + 1), $array);
		    }
	    }
	    $html = array_sum($html);
	    print_r($html);
            return $count;
	}
Après j'ai pas testé mais tu vois l'idée
__________________
Spécialité : Développement WEB
Indispensables : Doc PHP ~ Doc MySQL ~ w3schools ~ validateurs W3C ~ Google Adwords

keaton7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 14h32   #7
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 554
Points : 2 554
Envoyer un message via Skype™ à rawsrc
Je te propose ceci :
Code :
1
2
3
4
5
6
7
$total = 0;
array_walk_recursive($data,
   function($v, $k) use (&$total) {
      $total += ($k === 'nb_articles') ? $v : 0;
   }
);
echo $total;
Voilà, voilà
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 14h57   #8
Membre éclairé
 
Avatar de keaton7
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 320
Points : 320
Excellent, j'ai appris 2 notions en un bout de code :
  • les fonctions anonymes
  • Closure

Thanx
__________________
Spécialité : Développement WEB
Indispensables : Doc PHP ~ Doc MySQL ~ w3schools ~ validateurs W3C ~ Google Adwords

keaton7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 17h13   #9
Membre du Club
 
Inscription : mai 2007
Messages : 209
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 209
Points : 50
Points : 50
keaton7 => C'est parfait merci beaucoup la 1er solution est la bonne.

rawsrc => Je trouve ton code super intéressant par sa simplicité, mais je ne le comprend pas. Tu pourrais le commenter et me dire se que tu met dans $data ?
christobale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 17h30   #10
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 554
Points : 2 554
Envoyer un message via Skype™ à rawsrc
Citation:
Envoyé par christobale Voir le message
rawsrc => Je trouve ton code super intéressant par sa simplicité, mais je ne le comprend pas. Tu pourrais le commenter et me dire se que tu met dans $data ?
Bah, c'est ton tableau de données à parcourir, non ?
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h41.


 
 
 
 
Partenaires

Hébergement Web