Recursivite...

Le
VooDoo
Bonjour,

j'ai fait un p'tit script php pour de la gestion documentaire et j'aurai
besoin d'un p'tit coup de main.
j'ai une table categorie dans laquelle, j'ai :
id, de la categorie
pid, id de la categorie parente
title, titre
desc, description

Il n'y a pas de limite dans le nombre de sous categories
Je cherches a afficher de maniere sympa les categories et afficher
l'arborescence complete de la ou on se trouve.
J'y arrive, mais ca marche plus au dela de 2 niveaux, et je vois bien qu'il
faut que j'ecrives autrement si je ne veux pas etre confronté a une limite
de niveaux

Quelqu'un peut m'aider a ecricre une fonction qui remonte jusqu'a la
categorie racine (id) en recuperant toutes les sous categories trouvées à
partir d'une categorie donnée? (celle ou se trouve le user)

Merci pour vos conseils!
A+
VooDoo
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Mickael Wolff
Le #17765
Bonjour,

j'ai fait un p'tit script php pour de la gestion documentaire et j'aurai
besoin d'un p'tit coup de main.
j'ai une table categorie dans laquelle, j'ai :
id, de la categorie
pid, id de la categorie parente
title, titre
desc, description

Il n'y a pas de limite dans le nombre de sous categories...


Donc un arbre
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

CrazyCat
Le #18251
VooDoo wrote:
Il n'y a pas de limite dans le nombre de sous categories...
Je cherches a afficher de maniere sympa les categories et afficher
l'arborescence complete de la ou on se trouve.
Quelqu'un peut m'aider a ecricre une fonction qui remonte jusqu'a la
categorie racine (id) en recuperant toutes les sous categories trouvées à
partir d'une categorie donnée? (celle ou se trouve le user...)


Je ferais ça avec une petite classe relativement simple:

class arbo {
function arbo($table) {
$this->__construct($table);
}

/**
* Constructeur, génère un tableau représenatnt l'arborescence
* @param string $table
*/
function __construct($table) {
$sql = mysql_query("SELECT * FROM `".$table."` ORDER BY
parent_id ASC, ordre ASC");
while ($row = mysql_fetch_arry($sql)) {
if ($row['parent_id']!= 0) {
$this->Arr_arbo[$row['parent_id']]['child'][] = $row['id'];
}
$this->menu[$row['id']] = $row;
}
}

/**
* Retourne les parents de la rubrique courante
* @param integer $id
*/
function getparent($id) {
if ($this->menu[$id]['parent_id'] != 0) {
$this->parent[] = $this->menu[$id]['parent_id'];
$this->getparent($this->menu[$id]['parent_id']);
}
if (is_array($this->parent)) {
krsort($this->parent);
}
}
}

et il te suffit de faire:
$mytree = &new arbo('table');
$parents = $mytree->getparent(X);

avec X qui est l'id de la rubrique où tu es, $parents sera un tableau
avec la liste des parents (de 0 à X-1)

--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
Réseau IRC Francophone: http://www.crazy-irc.net

Mihamina Rakotomandimby
Le #18252
VooDoo wrote:
Bonjour,


Bonjour,

j'ai fait un p'tit script php pour de la gestion documentaire et j'aurai
besoin d'un p'tit coup de main.
j'ai une table categorie dans laquelle, j'ai :
id, de la categorie
pid, id de la categorie parente
title, titre
desc, description


Il n'est pas parfait, mais:
http://infogerance.us/Members/infogerance/tutoriels/php-navigation-tree

VooDoo
Le #24229
Merci pour vos réponses.
J'ai essayé d'appliquer celle de crazycat, je ne me sens pas assez bon pour
pouvoir appliquer les autres....
Apparement meme celle de Crazy j'ai du mal...

mon tableau reste toujours NULL...
et je vois pas ce qui cloche!!

Crazy tu peux m'eclairer???
Mihamina Rakotomandimby
Le #24226
VooDoo wrote:
J'ai essayé d'appliquer celle de crazycat, je ne me sens pas assez bon pour
pouvoir appliquer les autres....


Ben je compare la mienne et celle de CrazyCat:
- la mienne ne fait pas appel à des notion d'objet (ça n'est ni meilleur
ni moins bien).
- la mienne est un poil plus détaillée (je pense que tu n'as pas eu le
courage de lire les détails fournis)

De plus, plutot que de nous donner ce que donne telle ou telle méthode,
tu pourrais analyser le code et demander des explications sur telle ou
telle portion que tu ne comprends pas.

CrazyCat
Le #24227
VooDoo wrote:
Crazy tu peux m'eclairer???


Traité en privé (on ne va pas faire trop de bruit), je ferais parvenir
ici le problème et sa solution.

--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
Réseau IRC Francophone: http://www.crazy-irc.net

VooDoo
Le #24228
c'est bon c'est résolu...
merci pour votre aide!

"VooDoo" ffhi8d$m9p$
Merci pour vos réponses.
J'ai essayé d'appliquer celle de crazycat, je ne me sens pas assez bon
pour
pouvoir appliquer les autres....
Apparement meme celle de Crazy j'ai du mal...

mon tableau reste toujours NULL...
et je vois pas ce qui cloche!!

Crazy tu peux m'eclairer???


CrazyCat
Le #28221
Mihamina Rakotomandimby wrote:
Ben je compare la mienne et celle de CrazyCat:


Si tu y tiens, bien que je ne vois pas l'intérêt qu'il y a...

- la mienne ne fait pas appel à des notion d'objet (ça n'est ni meilleur
ni moins bien).


En effet, mais c'est la lutte habituelle entre l'objet et le procédurale.
Pour ma part, j'ai en fait réduit un objet que j'utilise fréquemment
pour l'adapter aux besoins de Voodoo, et je suis partisan de l'objet car
on peut ensuite l'étendre facilement pour avoir plus de choses.

- la mienne est un poil plus détaillée (je pense que tu n'as pas eu le
courage de lire les détails fournis)


J'ai fourni un code parlant de lui-même, l'avantage des objets c'est
qu'on peut les utiliser comme des black-boxes.

Tu as oublié en passant ce que j'appellerais un petit avantage de mon
système sur le tien: compte le nombre de requètes SQL.
J'avoue que je génère quelques variables qui, dans un cas extrème,
pourraient être assez énormes (vu que je met toute l'arbo en mémoire),
mais je doute que cela épuise réellement le système.

De plus, plutot que de nous donner ce que donne telle ou telle méthode,
tu pourrais analyser le code et demander des explications sur telle ou
telle portion que tu ne comprends pas.


Là je suis d'accord: quand on a un soucis, on essaye de préciser où est
le soucis ou quels sont les symptomes :)

--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
Réseau IRC Francophone: http://www.crazy-irc.net

P'tit Marcel
Le #27228
Tu as oublié en passant ce que j'appellerais un petit avantage de mon
système sur le tien: compte le nombre de requètes SQL.
J'avoue que je génère quelques variables qui, dans un cas extrème,
pourraient être assez énormes (vu que je met toute l'arbo en mémoire),
mais je doute que cela épuise réellement le système.


Mes deux centimes d'euros :

1- Il vaut mieux n'extraire que les données dont on aura besoin. Ici,
c'est "l'arborescence complete de la ou on se trouve" et non toute l'arbo

2- J'ai toujours très peur d'un traitement récursif qui stocke ses
données en mémoire car la récursivité a potentiellement un déploiement
exponentiel. Même si php gère mieux les "grosses" variables que des
langages plus anciens (cobol avec nous), c'est risqué de se retrouver
avec une variable qui peut peser des centaines de Mo voire des Go...


a+
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/

Publicité
Poster une réponse
Anonyme