Bonjour à tous,

Je dois reproduire l'arborescence de mon menu, et je refais tout mon code avec le but de le faire plus propre et plus simple. Simplement je me prend énormément le chou et je me demande si j'utilise la meilleur manière.
Je travaille avec des array et je pense que ne les manipule pas correctement.

Présentation:
Mon arborescence (categorie ou menu) est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
-root (id = 1)
--iPod(id = 2) => level1
---test2 (id = 5 ) => level2
----test3 (id = 6) => level3
-----test4(id = 7) => level4
----test33 (id = 12) => level3
---test22 (id = 10) => level2
---test222 (id = 11) => level2
--Accessoire (id = 3) => level1
--Portable (id = 4) => level1
--Autres (id = 9) => level1
J'ai créé une fonction qui va m'afficher les menus par niveau (level)
Code PHP : 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
 
// FUNCTION
// $ id_parent => id de la categorire parent dont on veut connaitre ses catégorie enfant
// $level_depth => Niveau (level) des categories
// $langugee => langue :o) (peut d'incidence)
function Category($id_parent, $level_depth, $language){
	$query						= "	SELECT DISTINCT c.id_category, COUNT(cp.id_product) as nbProd, c.level_depth, c.id_parent, c.active, l.id_category, l.name, l.id_lang
									FROM "._DB_PREFIX_."category c 
									INNER JOIN "._DB_PREFIX_."category_lang l ON c.id_category = l.id_category
									LEFT JOIN "._DB_PREFIX_."category_product cp ON c.id_category = cp.id_category
									WHERE c.active = 1 AND c.level_depth = ".$level_depth." AND c.id_parent = ".$id_parent." AND l.id_lang = ".$language." 
									GROUP BY c.id_category
									ORDER BY l.name ASC";
 
	$result						= Db::getInstance()->s($query);
 
	// Nb de categoreis du premier niveau
	$nbCat						= sizeof($result); // Commence à 1 et pas 0
 
	// Dans le cas des sous-categorie; s'il y en a pas pour une categorie parent, il return 0, donc rien en sortie
	if($nbCat) 	return $result;
}
Cette fonction fonctionne très bien.

Donc si je veux connaitre les categorie enfant du premier niveau je fait
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
$poolCategories 	= Category(1,1,2); //ID parent, level1, langue
print_r($poolCategories);
et j'ai pour le nievau 1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
Array ( 
	[0] => Array ( [id_category] => 3 [nbProd] => 2 [level_depth] => 1 [id_parent] => 1 [active] => 1 [name] => Accessoires [id_lang] => 2 ) 
	[1] => Array ( [id_category] => 2 [nbProd] => 3 [level_depth] => 1 [id_parent] => 1 [active] => 1 [name] => iPods [id_lang] => 2 ) 
	[2] => Array ( [id_category] => 4 [nbProd] => 2 [level_depth] => 1 [id_parent] => 1 [active] => 1 [name] => Portables [id_lang] => 2 ) 
	[3] => Array ( [id_category] => 9 [nbProd] => 4 [level_depth] => 1 [id_parent] => 1 [active] => 1 [name] => test [id_lang] => 2 ) 
)
Ce qui est très bien.
Maintenant je dois construire $poolCategories de manière à obtenir ca au final. (J'espère que les tabulations deront conservées)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Array ( 
	[0] => Array ( [id_category] => 3 [level_depth] => 1 [id_parent] => 1 [active] => 1 [name] => Accessoires [id_lang] => 2 ) 
	[1] => Array ( [id_category] => 9 [level_depth] => 1 [id_parent] => 1 [active] => 1 [name] => Autre [id_lang] => 2 ) 
	[2] => Array ( [id_category] => 2 [level_depth] => 1 [id_parent] => 1 [active] => 1 [name] => iPods [id_lang] => 2 [child] => Array (
			[0] => Array ( [id_category] => 5 [level_depth] => 2 [id_parent] => 2 [active] => 1 [name] => test2 [id_lang] => 2 [child] => Array ( 
					[0] => Array ( [id_category] => 6 [level_depth] => 3 [id_parent] => 5 [active] => 1 [name] => test3 [id_lang] => 2 [child] => Array ( 
							[0] => Array ( [id_category] => 7 [level_depth] => 4 [id_parent] => 6 [active] => 1 [name] => test4 [id_lang] => 2 ) ) ) 
					[1] => Array ( [id_category] => 12 [level_depth] => 3 [id_parent] => 5 [active] => 1 [name] => test33 [id_lang] => 2 ) ) ) 
			[1] => Array ( [id_category] => 10 [level_depth] => 2 [id_parent] => 2 [active] => 1 [name] => test22 [id_lang] => 2 ) 
			[2] => Array ( [id_category] => 11 [level_depth] => 2 [id_parent] => 2 [active] => 1 [name] => test222 [id_lang] => 2 ) ) ) 
	[3] => Array ( [id_category] => 4 [level_depth] => 1 [id_parent] => 1 [active] => 1 [name] => Portables [id_lang] => 2 ) 
)
Donc mon problème, il commence la, car je vais devoir manipuler les array...
Je ne sais pas si j'ai dois tout faire avec des forerach(), mais je me demande alors s'il y a pas plus simple à faire des fonctions liés aux array.

Par exemple pour le niveau deux, j'y arrive sans problème car c'est simple
Code PHP : 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
 
$poolCatLevel2 = array();
 
foreach($poolCategories as $key1 => $val1){
 
	$catLevel2 						= Category($poolCategories[$key1]['id_category'],2,2);
 
 
	if(!empty($catLevel2)){
		$poolCategories[$key1]['child'] 	= $catLevel2;
		$poolCatLevel2						= array_merge($poolCatLevel2, $catLevel2);
	}
 
}
print_r($poolCatLevel2);
print_r($poolCategories);
$poolCategories m'affiche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
Array ( 
	[0] => Array ( [id_category] => 3 [nbProd] => 2 [level_depth] => 1 [id_parent] => 1 [active] => 1 [name] => Accessoires [id_lang] => 2 ) 
	[1] => Array ( [id_category] => 9 [nbProd] => 4 [level_depth] => 1 [id_parent] => 1 [active] => 1 [name] => Autre [id_lang] => 2 ) 
	[2] => Array ( [id_category] => 2 [nbProd] => 3 [level_depth] => 1 [id_parent] => 1 [active] => 1 [name] => iPods [id_lang] => 2 [child] => Array ( 
			[0] => Array ( [id_category] => 5 [nbProd] => 1 [level_depth] => 2 [id_parent] => 2 [active] => 1 [name] => test2 [id_lang] => 2 ) 
			[1] => Array ( [id_category] => 10 [nbProd] => 0 [level_depth] => 2 [id_parent] => 2 [active] => 1 [name] => test22 [id_lang] => 2 ) 
			[2] => Array ( [id_category] => 11 [nbProd] => 0 [level_depth] => 2 [id_parent] => 2 [active] => 1 [name] => test222 [id_lang] => 2 ) ) ) 
	[3] => Array ( [id_category] => 4 [nbProd] => 2 [level_depth] => 1 [id_parent] => 1 [active] => 1 [name] => Portables [id_lang] => 2 )
)
Ce qui est juste.
Et $poolCatLevel2 m'affiche:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
Array ( 
	[0] => Array ( [id_category] => 5 [nbProd] => 1 [level_depth] => 2 [id_parent] => 2 [active] => 1 [name] => test2 [id_lang] => 2 ) 
	[1] => Array ( [id_category] => 10 [nbProd] => 0 [level_depth] => 2 [id_parent] => 2 [active] => 1 [name] => test22 [id_lang] => 2 ) 
	[2] => Array ( [id_category] => 11 [nbProd] => 0 [level_depth] => 2 [id_parent] => 2 [active] => 1 [name] => test222 [id_lang] => 2 ) 
)
Ce qui est juste.

Maintenat pour construire le niveau trois, la ca devient la galère, car j'utilise des foreach à tort et à travers.

C'est là, si vous avez pu prendre le temps de me lire, que j'aimerais avoir vos lumières.
Comment me recommendriez vous de faire, car je peux extraire (avec ma fonction) les différentes categories de chaque niveau, mais je dois les merger dans $poolCategories au bon endroit.

Y-a-t-il matière à faire avec des fonctions array http://www.php.net/manual/en/function.array.php?

Je vous remercie énormément pour votre lectures et consiels