PHP:如何将foreach循环拆分为3个部分?

PHP:如何将foreach循环拆分为3个部分?,php,list,foreach,counter,blogs,Php,List,Foreach,Counter,Blogs,我的网站有点小问题。我有一个博客,每一篇文章都在一个列表中。现在我想把这个列表分成3个列表 我的问题是: <ul class="row-3"> <?php $i = 1; foreach($posts as $post): ?> <?php if($i % 3 == 0): ?> <?php echo "$article" ?> <?php endif; $i++; ?> &l

我的网站有点小问题。我有一个博客,每一篇文章都在一个列表中。现在我想把这个列表分成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放入第三个列表 但我完全不知道如何解决这个问题

我希望你们能帮我一点忙,我很抱歉我的英语不好


非常感谢。

我不确定这是否适用于您的订购,但array\u chunk可能会满足您的需求

这样,您就不必处理共享公共倍数的问题

如果排序是一个问题,那么在array\u chunk页面上会有一条注释,其中包含一些执行array\u chunk\u垂直的代码。这两种方法中的一种可以满足您的需要

类似以下未经测试的代码:

//每个组将位于其自己的节数组中。
$sections=array_chunk($posts,2)

所以我的小问题很容易解决^^:

<?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);
?>

因此,我在堆栈溢出上发现了这个函数,它将数组分成3部分(或者每隔一个数字而不是x:partition($array,x);)

然后剩下的就简单了:

<?php foreach($sec1[0] as $post): ?>
    ...
<?php endforeach ?>

...

我只需要为每个列表制作3个部分,为每个列表制作一个foreach。

非常感谢!我想现在我可以用其中一种方法解决我的问题了。