【问题标题】:PHP: How can I split a foreach-loop into 3 parts?PHP:如何将 foreach 循环分成 3 部分?
【发布时间】:2017-05-11 21:11:36
【问题描述】:

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

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

非常感谢。

【问题讨论】:

    标签: php list foreach counter blogs


    【解决方案1】:

    我不确定这是否适用于您的订购,但 array_chunk,https://secure.php.net/manual/en/function.array-chunk.php,可能会满足您的需求。

    这样你就不必处理共享一个公倍数了。

    如果排序是一个问题,array_chunk 页面上有一个注释,其中包含一些执行 array_chunk_vertical 的代码。这两种方法之一应该可以满足您的需求。

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

    // 每个组将在它自己的部分数组中。 $sections = array_chunk($posts, 2);

    【讨论】:

    • 非常感谢地役权!我想现在我可以用其中一种方法解决我的问题。
    【解决方案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);
    ?>
    

    所以我在 Stack Overflow 上找到了这个函数,它将一个数组分成 3 部分(或者你写的每个其他数字,而不是 x: partition($array, x); )。

    然后剩下的就简单了:

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

    我只需要为每个列表创建 3 个部分,并为每个列表创建一个 foreach。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      相关资源
      最近更新 更多