remplir un array avec un foreach

Petit nouveau ! | 2 Messages

12 août 2011, 12:34

Bonjour.

Je me rends compte que j'ai d'énorme lacune en php.
je n'arrive pas à résoudre se problème

J'ai une table avec mes catégories et sous catégories qui ressemble à ca :

Image

J'aimerais faire un menu avec ces catégories et chaque sous-catégories

J'ai essayer comme ca :

Code : Tout sélectionner

$menu_sous_menu = array(); foreach($sous_menu as $k=>$v){ if($v['id_categorie_parent'] =='0'){ $menu_sous_menu[$v['id_categorie']][] = $v['label_categorie']; }else{ $menu_sous_menu[$v['id_categorie_parent']][] = $v['label_categorie']; } } var_dump($menu_sous_menu);
et j'obtient ca:

array(4) {
[1]=>
array(5) {
[0]=>
string(15) "Traditionnelles"
[1]=>
string(9) "Bourgogne"
[2]=>
string(6) "Savoie"
[3]=>
string(4) "Jura"
[4]=>
string(11) "Accessoires"
}
[2]=>
array(3) {
[0]=>
string(10) "Classiques"
[1]=>
string(8) "Bretagne"
[2]=>
string(11) "Accessoires"
}
[3]=>
array(2) {
[0]=>
string(9) "Tournants"
[1]=>
string(7) "Spirale"
}
[4]=>
array(3) {
[0]=>
string(6) "Design"
[1]=>
string(17) "Métallique Design"
[2]=>
string(12) "Chêne Design"
}
}

mais j'aimerais obtenir ca :

array(4) {
['Traditionnelles']=>
array(4) {
[0]=>
string(9) "Bourgogne"
[1]=>
string(6) "Savoie"
[2]=>
string(4) "Jura"
[3]=>
string(11) "Accessoires"
}
['Classiques']=>
array(2) {
[0]=>
string(8) "Bretagne"
[1]=>
string(11) "Accessoires"
}
['Tournants']=>
array(1) {
[0]=>
string(7) "Spirale"
}
['Design']=>
array(2) {
[0]=>
string(17) "Métallique Design"
[1]=>
string(12) "Chêne Design"
}
}

Si quelqu'un à une solution :D

Merci beaucoup

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 août 2011, 14:07

salut,

a vu de nez je ferais ça (pas tester)
<?php
$menu_sous_menu = array();
$tmp = array();
foreach($sous_menu as $k=>$v){
    if($v['id_categorie_parent'] =='0'){
        $menu_sous_menu[$v['label_categorie']] = array();
		$tmp [ $v['id_categorie'] ] = $v['label_categorie'];
    }else{
        $menu_sous_menu[ $tmp[ $v['id_categorie_parent']] ][] = $v['label_categorie'];
    }
}
?>
explication
le tableau tmp va contenir les labels des catégorie parentes indexé par leur id_catégorie de la table.
comme ça quand tu est "un enfant" tu a le nom de la catégorie parente dans le tableau en utilisant l'index du parent
par exemple $tmp[2] == Classiques , $tmp[3] == Tournants etc

une autre solution serait de te tourner vers SQL pour ajouter, dans ta selection la selection de l'ancetre et de mettre null s'il n'y a pas d'ancetre.
comme ça tu aurais directement dans le tableau $v et pourrait ainsi trier sur le fait que l'ancetre soit null ou nom et si c'est pas null tu utilise directement la valeur dans le tableau sous menu ;)

@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 2577 Messages

12 août 2011, 14:42

Bonjour,

Il me semble qu'il manque une colonne dans ta table pour ordonner les éléments de menu. Ajouter une colonne "poids" et lire la table avec un "order by poids" te permettrai d'être sur de l'ordre.

Petit nouveau ! | 2 Messages

12 août 2011, 15:04

Merci beaucoup moogli =)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 août 2011, 15:14

de rien, le conseil de Mazarini est intéressant pour ne pas de compliquer dans le futur ;)


@+
Il en faut peu pour être heureux ......