每4个实例将Ad元素插入到foreach循环中

时间:2019-04-02 20:17:05

标签: php loops cakephp foreach

我正在将feed广告添加到我的网站。我有一个foreach语句,用于创建帖子列表。我创建了一个计数器,该计数器应该每四个帖子计数一次,然后插入广告内容,然后重复。

我已经尝试过其他迭代,但这是我实际上可以做的事情。我可以找到很多有关wordpress的确切信息。但是我正在运行蛋糕php,并且希望使用纯PHP解决方案。

    <?php
    $count = 1;
    foreach($stories as $story) {
            echo '<h2><a href="'.BASE_URL.'/'.$story->slug.'">'.$story->title.'</a></h2>';
            if(!empty($story->excerpt)) {
                echo $story->excerpt;
            } else {
                echo limit_text($story->body);
            }
            if ($count % 4 == 1) {
                echo AD_SENSE_INFEED;
            }
    }
    $count++;
    ?>

这段代码是我目前拥有的,但是无法按我希望的方式工作。仿佛现在基本上彼此隔goes了。因此,POST,AD,POST AD ...等。

2 个答案:

答案 0 :(得分:1)

您的问题不是编码问题,而是数学问题。您使用的基本上称为模数或余数。

这样说:

if ($count % 4 == 1) {

要使其等于1,我们必须喂入一次均匀进去并再留一遍的东西。

您想要做的是:

if ($count % 4 == 0) {

再也就是说,没有余数,有4个被平均分配,没有剩余。

正如@RiggsFolly所提到的,我完全错过了这一点(给他的评论以投票表决),您的$ count变量也应该在循环内递增,否则它将在循环结束后仅递增一次。

答案 1 :(得分:0)

您可以完全消除计数(而仅使用数组的数字索引)

//just some "test" data
$stories = array_fill(0, 100, []);

foreach( $stories as $count => $story) {
    echo $count." ".($count % 4)."\n";

    if ($count % 4 == 3) {
        echo "--------------------------------------\n";
    }
}

输出:

0 0
1 1
2 2
3 3
--------------------------------------
4 0
5 1
6 2
7 3
--------------------------------------
...

Sandbox

如果不确定键的顺序是否正确,可以重置它们:

foreach(array_values($stories) as $count => $story) {

很显然,数组从0开始,因此您必须将%的结果偏移一点……大声笑……是的,我懒得增加。