web-dev-qa-db-fra.com

PHP: rompre la boucle imbriquée

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;
                }               
            }
}
58
user1355300

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

148
dynamic

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++];
                    ..
                }               
            }
}
?>
3
periklis