Подтвердить что ты не робот

PHP: разрыв вложенного цикла

У меня проблема с вложенным циклом. У меня несколько сообщений, и у каждого сообщения есть несколько изображений.

Я хочу получить всего 5 изображений из всех сообщений. Поэтому я использую вложенный цикл для получения изображений и хочу разбить цикл, когда число достигнет 5. Следующий код вернет изображения, но, похоже, не разбивает цикл.

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;
                }               
            }
}
4b9b3361

Ответ 1

В отличие от других языков, таких как C/С++, в PHP вы можете использовать необязательный параметр break следующим образом:

break 2;

В этом случае, если у вас есть две петли, такие как:

while(...) {
   while(...) {
      // do
      // something

      break 2; // skip both
   }
}

break 2 пропустит оба цикла while.

Doc: http://php.net/manual/en/control-structures.break.php

Это делает переходы по вложенным циклам более читабельными, чем, например, с помощью goto других языков

Ответ 2

Используйте цикл 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++];
                    ..
                }               
            }
}
?>