J'ai un problème avec la boucle imbriquée. J'ai plusieurs messages et chaque message a plusieurs images.
Je veux obtenir un total de 5 images de tous les messages. J'utilise donc la boucle imbriquée pour obtenir les images et je souhaite rompre la boucle lorsque le nombre atteint 5. Le code suivant renverra les images, mais ne semble pas rompre la boucle.
foreach($query->posts as $post){
if ($images = get_children(array(
'post_parent' => $post->ID,
'post_type' => 'attachment',
'post_mime_type' => 'image'))
){
$i = 0;
foreach( $images as $image ) {
..
//break the loop?
if (++$i == 5) break;
}
}
}
Contrairement à d'autres langages tels que C/C++, en PHP vous pouvez utiliser le paramètre optionnel de break comme ceci:
break 2;
Dans ce cas, si vous avez deux boucles telles que:
while(...) {
while(...) {
// do
// something
break 2; // skip both
}
}
break 2
sautera les deux pendant les boucles.
Doc: http://php.net/manual/en/control-structures.break.php
Cela rend le saut sur les boucles imbriquées plus lisible que par exemple en utilisant goto
d'autres langues
Utiliser une boucle while
<?php
$count = $i = 0;
while ($count<5 && $query->posts[$i]) {
$j = 0;
$post = $query->posts[$i++];
if ($images = get_children(array(
'post_parent' => $post->ID,
'post_type' => 'attachment',
'post_mime_type' => 'image'))
){
while ($count < 5 && $images[$j]) {
$count++;
$image = $images[$j++];
..
}
}
}
?>