78

ネストされたループに問題があります。複数の投稿があり、各投稿には複数の画像があります。

すべての投稿から合計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;
                }               
            }
}
4

2 に答える 2

181

C / C ++などの他の言語とは異なり、PHPでは次のようにbreakのオプションのパラメーターを使用できます。

break 2;

この場合、次のような2つのループがある場合:

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

      break 2; // skip both
   }
}

break 2両方のwhileループをスキップします。

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

gotoこれにより、ネストされたループを飛び越えることが、たとえば他の言語を使用するよりも読みやすくなります。

于 2012-07-23T09:14:13.573 に答える
3

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++];
                    ..
                }               
            }
}
?>
于 2012-07-23T10:01:20.910 に答える