知道如何制作这个循环

时间:2016-01-31 21:02:16

标签: php loops

我需要通过PHP(WordPress WP_Query)创建这样的循环, 它类似于one大项目,然后是two个小项目,然后是two个小项目,然后是one大项目,依此类推...... 这是纯HTML:

<div class="swiper-slide big">
    <div class="item"></div>
</div>

<div class="swiper-slide normal">
    <div class="item"></div>
    <div class="item"></div>
</div>

<div class="swiper-slide normal">
    <div class="item"></div>
    <div class="item"></div>
</div>

<div class="swiper-slide big">
    <div class="item"></div>
</div>

<div class="swiper-slide normal">
    <div class="item"></div>
    <div class="item"></div>
</div>

<div class="swiper-slide normal">
    <div class="item"></div>
    <div class="item"></div>
</div>

<div class="swiper-slide big">
    <div class="item"></div>
</div>

<div.item>是帖子元素。 我无法找到任何模式来制作这样的循环,一种选择是使用计数器并比较每个数字,但这不是一种稳定的方法。 任何人都可以帮忙。

fn:.swiper-slide DIV只是包装器,每次循环运行时,我们只有一个<div.item>,我们需要使用上面解释的模式对这些.item进行分组。

4 个答案:

答案 0 :(得分:2)

这是一个更新的示例,您将项目作为数组传递:

<?php

function myloop($items) {

    $i = 0;
    $isBig = array( true, false, false);

    while(sizeof($items) > 0) {
        if($isBig[$i]) {
            echo "Big ! ", array_shift($items);
            echo " \n";
        } else {
            echo "Normal... ", array_shift($items), " ", array_shift($items);
            echo " \n";
        }
        $i = ( $i + 1) % sizeof($isBig);
    }
}

myloop(array("item1","item2","item3","item4","item5","item6","item7","item8","item9","item10"));

?>

Cli输出:

$ php loop.php
Big ! item1
Normal... item2 item3
Normal... item4 item5
Big ! item6
Normal... item7 item8
Normal... item9 item10

答案 1 :(得分:2)

使用计数器变量(对于此示例,var dt: NSTimeInterval = 0 var lastUpdateTime: NSTimeInterval = 0 override func update(currentTime: CFTimeInterval) { /* Called before each frame is rendered */ if lastUpdateTime > 0 { dt = currentTime - lastUpdateTime } else { dt = 0 } lastUpdateTime = currentTime countDownInt = countDownInt-dt countDown.text = ... } )来跟踪打印的div部分的数量。你的代码应该是这样的:

<强>编辑:

根据您的要求,我已经更新了我的答案。

$i

答案 2 :(得分:2)

您可以使用模数等式而不是“计数器”。

在您的示例中,我们可以应用3条规则:

  1. 一个大的,然后四个小
  2. 第一个和第三个小的开始一个新的父div
  3. 第二个和第四个小结束父div
  4. 假设您的帖子在数组中,并带有数字键,您可以使用:

    foreach ($itemArray as $key => $item) {
        $modulo = ($key+1)%5;
        switch($modulo) {
            case 1:
                echo <<<END
                    <div class="swiper-slide big">
                        <div class="item"></div>
                    </div>
                END;
            break;
            case 2:
            case 4:
                echo <<<END
                    <div class="swiper-slide normal">
                        <div class="item"></div>
                END;
            break;
            case 3:
            case 0:
                echo <<<END
                        <div class="item"></div>
                    </div>
                END;
            break;
        }
    }
    
    //Closing possible open div
    $arrCountModulo=count($itemArray)%5;
    if($arrCountModulo==2||$arrCountModulo==4) {
        echo "</div>";
    }
    

答案 3 :(得分:0)

试试这个:

$bignormal = 0;
for ($i=0;$i<$whatever;$i++) {
   if ($bignormal>0) {
       echo "normal";       
   }
   else {
       echo "big";
   }
   $bignormal++;
   if ($bignormal>2) {
      $bignormal = 0;
   }
}

这不是世界上最伟大的代码,但它确实有效。

阐释:

$bignormal(默认情况下)设置为0。因此,$bignormal不会超过0,因此我们会回复big并增加$bignormal

下一次迭代,$bignormal1,因此大于0,因此我们回显normal并增加$bignormal

下一次迭代,$bignormal2,因此大于0,因此我们回显normal。但是,当我们增加$bignormal时,它现在大于2(值3),因此最终if语句将$bignormal设置为{{ 1}}。

下一次迭代0设置为$bignormal,因此它不会大于0,因此我们会再次呼叫0并再次增加big

总之......

没有什么比这更复杂了,可能会用一些更好的逻辑来压缩堆:D