私は本質的にforeachループを使用していくつかのポストカテゴリをループし、各カテゴリのポストのマークアップを出力します。私は自分の変数$ iiがforeachの繰り返しごとにリセットされると思っていましたが、それはうんざりしています。私は各ループの始めに$ ii = 1が必要ですが、これを達成する方法はありますか?PHP foreachループの各繰り返しで変数をリセットする
各カテゴリ内の3つのポストのために$cats = array(
'cat1' => 20,
'cat2' => 21,
'cat3' => 22,
'cat4' => 23
);
foreach($cats as $cat){
$ii = 1;
$cat_name = get_cat_name($cat);
echo "<div class='container'>
<h1>$cat_name</h1>
";
while(have_posts()) : the_post();
$title = get_the_title() . ' ' . $ii;
if(in_category($cat)){
echo "<p>$title</p>";
}
$ii++; endwhile;
echo '</div>'; // end container
}
以下の基本的なコードの構造は、どのような出力されるのは、基本的に、次のとおりです。
Cat1
- title 1
- title 2
- title 3
Cat2
- title 4
- title 5
- title 6
etc.
私の所望の出力は次のようになります。
Cat1
- title 1
- title 2
- title 3
Cat2
- title 1
- title 2
- title 3
リセットする方法はあります私の希望する出力を達成するための各反復の変数?これを行うより良い方法は?まだ何も見つけられていない。しかし、かなりシンプルだ。前もって感謝します!
編集: ここでの回答の束は何かを得ていますが、カウンターを条件にスコープすることで、私が必要な問題を解決するのに役立ちました。回避策の種類ですが、基本的には、特定のカテゴリのwhileループの5回目の繰り返しで、特殊なケースのマークアップを出力する必要があるかどうかを確認するだけでした。 (申し訳ありませんが、質問が私の目的を少し曖昧にしてしまった場合は、実際のループで多くのことが実行されています - 私はできるだけシンプルにしたいと思います)。そのようになっています
if($cat == $cats['cat2']){
$ii++;
if($ii === 5){
echo '<hr>';
}
}
まだこれを達成するための、より堅牢な方法をだと私はそれのための新しいアイデアを開いているように感じるが、それは今のために働いています!
'$ ii = 0;'を 'foreach(){}'ループの前に置き、 '$ title = get_the_title()を使うだけです。 ''。 ++ $ ii; '。他のすべての '$ ii'の使用を取り除く。 – MonkeyZeus