Вставьте рекламный элемент в цикл foreach каждые 4 раза - PullRequest
0 голосов
/ 02 апреля 2019

Я добавляю в фид объявления на свой сайт.У меня есть оператор 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++;
    ?>

Этот код - то, что у меня есть в настоящее время, но он не работает так, как мне бы хотелось.Как будто теперь это в основном идет каждый другой.Так что POST, AD, POST AD ... и т.д.

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Ваша проблема не в коде, а в математической. То, что вы используете, называется по модулю или остаткам.

Так что сказал:

if ($count % 4 == 1) {

Чтобы оно равнялось 1, нам нужно кормить чем-то, что входит равномерно и оставляет еще один.

То, что вы хотите сделать, это:

if ($count % 4 == 0) {

Ака, это означает, что остатка нет, 4 идет в него равномерно, ничего не осталось.

Как уже упоминалось @RiggsFolly, и я полностью пропустил это (оставьте его комментарий голосом вверх), ваша переменная $ count также должна быть увеличена внутри цикла, иначе она будет увеличиваться только один раз после окончания цикла.

0 голосов
/ 03 апреля 2019

Вы можете избавиться от счета все вместе (и просто использовать числовой индекс массива)

//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
--------------------------------------
...

Песочница

Если вы не уверены, что ключи в правильном порядке, вы можете сбросить их:

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

Очевидно, что массив начинается с 0, поэтому вы должны сместить результат %немного ... лол ... да мне лень увеличивать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...