ネストされたループに問題があります。複数の投稿があり、各投稿には複数の画像があります。
すべての投稿から合計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
を使用する場合よりも、ネストされたループをジャンプする方が読みやすくなります。
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++];
..
}
}
}
?>