我的网站上有一点问题。我有一个博客,每篇文章都在一个列表中。现在我想将这一个列表拆分为3个列表。
我的问题:
<ul class="row-3">
<?php $i = 1; foreach($posts as $post): ?>
<?php if($i % 3 == 0): ?>
<?php echo "$article" ?>
<?php endif; $i++; ?>
<?php endforeach ?>
</ul>
<ul class="row-2">
<?php $i = 1; foreach($posts as $post): ?>
<?php if($i % 2 == 0): ?>
<?php echo "$article" ?>
<?php endif; $i++; ?>
<?php endforeach ?>
</ul>
如果我这样做,每隔三个循环进入第三个列表,每隔一个循环进入第二个列表。但问题是:
第5条和第10条将在两个清单中......
所以我必须将整个foreach循环分成3个部分,计数器计数到3,然后如果它在3再次变为0,那么我可以将每个1放入第一个列表中每2个进入第二个和每个3进入第三个清单 但我完全不知道如何解决这个问题。
我希望你们能帮助我一点,我很抱歉我的英语不好......
非常感谢。
答案 0 :(得分:3)
我不确定这会对你的订购有效,但是array_chunk https://secure.php.net/manual/en/function.array-chunk.php可以做你想要的。
这样您就不必处理共享的共同倍数。
如果排序是个问题,那么在array_chunk页面上有一个注释,它有一些代码可以执行array_chunk_vertical。这两种方法中的一种应该能满足您的需求。
下面这个未经测试的代码:
//每个组都在它自己的section数组中。 $ sections = array_chunk($ posts,2);
答案 1 :(得分:0)
所以对我的小问题的解决很容易^^:
<?php
function partition( $list, $p ) {
$listlen = count( $list );
$partlen = floor( $listlen / $p );
$partrem = $listlen % $p;
$partition = array();
$mark = 0;
for ($px = 0; $px < $p; $px++) {
$incr = ($px < $partrem) ? $partlen + 1 : $partlen;
$partition[$px] = array_slice( $list, $mark, $incr );
$mark += $incr;
}
return $partition;
}
$sec1 = partition($posts, 3);
$sec2 = partition($posts, 3);
$sec3 = partition($posts, 3);
?>
所以我在Stack Overflow上找到了这个函数,它将一个数组拆分为3个部分(或者每个其他数字,而不是x:partition($ array,x);)。
然后其余的很容易:
<?php foreach($sec1[0] as $post): ?>
...
<?php endforeach ?>
我只需为每个列表制作3个部分,并为每个列表制作foreach。