在PHP foreach循环的每次迭代中重置变量

时间:2016-09-07 18:51:52

标签: php wordpress loops foreach while-loop

我基本上使用foreach循环来遍历一些帖子类别,然后为每个类别中的帖子输出一些标记。我认为我的变量$ ii会在foreach的每次迭代中被重置,但是它会讽刺(我的愚蠢假设)。我确实需要在每个循环开始时$ ii = 1,有没有办法实现这一目标?

下面的基本代码结构
$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>';
    }
}

仍然觉得有更强大的方法来实现这一点,我对它有新的想法,但它现在正在运作!

2 个答案:

答案 0 :(得分:1)

不确定您的这些功能内部发生了什么,但尝试在$title条件检查中构建in_category()变量

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

看起来您抓取帖子的功能会再次重新抓取每个帖子,并且只会根据$ cat的值,通过in_category()输出您需要的帖子。您的$ ii计数器应该重置正常,因为您在每个foreach迭代开始时将其明确设置为1。

答案 1 :(得分: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++;