Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recursivite...

9 réponses
Avatar
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=10) 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

9 réponses

Avatar
CrazyCat
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

Avatar
Mihamina Rakotomandimby
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

Avatar
Mickael Wolff
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 <http://sql.developpez.com/arborescence/>.

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

Avatar
VooDoo
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???
Avatar
Mihamina Rakotomandimby
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.

Avatar
CrazyCat
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

Avatar
VooDoo
c'est bon c'est résolu...
merci pour votre aide!

"VooDoo" a écrit dans le message de news:
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???


Avatar
CrazyCat
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

Avatar
P'tit Marcel
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/