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;
}
}
}
Ответы
Ответ 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++];
..
}
}
}
?>