Problème boucle foreach
Laura88
-
jordane45 Messages postés 40050 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 40050 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'ai un soucis avec deux boucles foreach imbriquées.
J'essaie de construire un menu dynamique, avec des services et des sous services.
Dans la base de donnée, chaque sous services est lié à un service
J'ai 7 sous services au total.
Le service 1 possède 5 sous-services
Le service 2 possède 2 sous-services.
Or, dans le services 2, un seul sous services s'affiche. Je ne comprend pas où j'ai fait la faute.
J'ai un soucis avec deux boucles foreach imbriquées.
J'essaie de construire un menu dynamique, avec des services et des sous services.
Dans la base de donnée, chaque sous services est lié à un service
J'ai 7 sous services au total.
Le service 1 possède 5 sous-services
Le service 2 possède 2 sous-services.
Or, dans le services 2, un seul sous services s'affiche. Je ne comprend pas où j'ai fait la faute.
<li>Services</li>
<li>
<?php
foreach ( $services as $s ) : ?>
<ul>
<li>
<?php // nom du service
echo $s['nom']; ?>
</li>
<li>
<ul>
<?php
foreach ( $ss_services as $ss ) :
if ( $s['id'] == $ss['idServices'] ) :?>
<li><?php echo $ss['nom']; ?></li>
<?php else :
break;
endif;
endforeach; ?>
</ul>
</li>
</ul>
<?php endforeach; ?>
</li>
</ul>
A voir également:
- Problème boucle foreach
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Smart tv qui s'allume et s'éteint en boucle - Forum Téléviseurs
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Mise à disposition de boucle locale dédiée ✓ - Forum Freebox
- Vlc lecture en boucle ✓ - Forum Lecteurs et supports vidéo
2 réponses
Bon, déjà... ta structure de bdd n'est pas évolutive.
Tu ne pourras toujours n'avoir que deux niveaux ( service / sous-service ). Si jamais tu voulais ajouter des niveaux supplémentaires, ta structure actuelle ne le permet pas.
Admettons que ça soit donc voulu et toujours comme ça.
Tu pourrais retravailler un peu le résutat de tes requêtes pour ensuite les manipuler plus facilement.
par exemple :
et dans ta page
Tu ne pourras toujours n'avoir que deux niveaux ( service / sous-service ). Si jamais tu voulais ajouter des niveaux supplémentaires, ta structure actuelle ne le permet pas.
Admettons que ça soit donc voulu et toujours comme ça.
Tu pourrais retravailler un peu le résutat de tes requêtes pour ensuite les manipuler plus facilement.
par exemple :
/**
* Fonction qui génère un array associatif par "service" pour les sous-services
*/
public function getAll_sous_services_array () // sous-services
{
$result = $this->getAll_sous_services();
$res = array();
foreach($result as $R){
$res[$R['idServices'][] = $R;
}
return $res;
}
et dans ta page
<ul>
<li>Services</li>
<li>
<?php
$ss_services = $tonObjet->getAll_sous_services_array(); //ligne à adapter à ton code
foreach ( $services as $s ){
$serviceID = $s['id'];
?>
<ul>
<li>
<?php // nom du service
echo $s['nom']; ?>
</li>
<li>
<ul>
<?php
if(!empty($ss_services[$serviceID])){
foreach ( $ss_services[$serviceID] as $ss ){
echo "<li>" . $ss['nom'] ."</li>";
} //endforeach;
}
?>
</ul>
</li>
</ul>
<?php } ?>
</li>
</ul>
Oui c'est dans un fichier à part, je travaille avec une architecture MVC.
public function getAll() // services { $sql = "SELECT * FROM t_services"; $services = $this->query($sql); return $services; } public function getAll_sous_services () // sous-services { $sql = "SELECT * FROM t_ss_services"; $ss_services = $this->query($sql); return $ss_services; }