Page 1 sur 1

remplir un array avec un foreach

Posté : 12 août 2011, 12:34
par ladyyvi
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

Re: remplir un array avec un foreach

Posté : 12 août 2011, 14:07
par moogli
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 ;)

@+

Re: remplir un array avec un foreach

Posté : 12 août 2011, 14:42
par Mazarini
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.

Re: remplir un array avec un foreach

Posté : 12 août 2011, 15:04
par ladyyvi
Merci beaucoup moogli =)

Re: remplir un array avec un foreach

Posté : 12 août 2011, 15:14
par moogli
de rien, le conseil de Mazarini est intéressant pour ne pas de compliquer dans le futur ;)


@+