我需要通过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
进行分组。
答案 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条规则:
假设您的帖子在数组中,并带有数字键,您可以使用:
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
。
下一次迭代,$bignormal
为1
,因此大于0
,因此我们回显normal
并增加$bignormal
。
下一次迭代,$bignormal
为2
,因此大于0
,因此我们回显normal
。但是,当我们增加$bignormal
时,它现在大于2
(值3
),因此最终if
语句将$bignormal
设置为{{ 1}}。
下一次迭代0
设置为$bignormal
,因此它不会大于0
,因此我们会再次呼叫0
并再次增加big
。
等
没有什么比这更复杂了,可能会用一些更好的逻辑来压缩堆:D