2016-09-07 27 views
0

私は本質的に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>'; 
    } 
} 

まだこれを達成するための、より堅牢な方法をだと私はそれのための新しいアイデアを開いているように感じるが、それは今のために働いています!

+0

'$ ii = 0;'を 'foreach(){}'ループの前に置き、 '$ title = get_the_title()を使うだけです。 ''。 ++ $ ii; '。他のすべての '$ ii'の使用を取り除く。 – MonkeyZeus

答えて

0

あなたは、whileループが終了した後、他のカウンタをインクリメントwhileループ内の別のカウンタをインクリメントすることができます:何があなたのそれらの機能の内側に起こっているの

$counter = 1; 
while(have_posts()) : the_post(); 

     $title = get_the_title() . ' ' . $counter; 

     if(in_category($cat)){ 
      echo "<p>$title</p>"; 
     } 

     $counter++; 

endwhile; 

$ii++; 
1

わからないが、あなたの内部であなたの$title変数を構築してみてくださいグラブの記事をあなたの関数が再びすべてのポストを再度つかみ、たったの$猫の値に基づいて、必要なものを出力しているようin_category()条件チェック

if (in_category($cat)) { 
    $title = get_the_title() . ' ' . $ii; 
    echo "<p>$title</p>"; 
    $ii++; 
} 

それはを経由して、見えます。あなたの$ iiカウンターは、foreach反復の開始時に明示的に1に設定しているので、うまくリセットする必要があります。

+0

$ ii ++の後のセミコロン –

+0

完了、セミコロンがないことに気付かなかった – georaldc

+0

私はカウンタの再設定について同じ仮定をしていましたが、そのように振る舞いませんでした!しかし、私はそれをするために必要なカテゴリへのインクリメントをスコープしてくれました。申し訳ありませんが、質問があいまいに囲まれている場合は、私に正しい方向へのプッシュを与えてくれてありがとう! :) –

関連する問題