1. ホーム
  2. php

ネストされたループを壊す [重複]。

2023-07-21 04:31:05

質問

ネストされたループで困っています。複数の投稿があり、各投稿には複数の画像があります。

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

どのように解決するのですか?

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 を使うよりも読みやすくなります。