(PHP)在固定数量的列上平均传播数组内容

时间:2011-11-10 19:01:20

标签: php arrays

我在这里疯了 - 希望你能帮助我解决这个问题!什么应该是非常简单的数学让我感到困惑。

$columns = 3;
$items = range(1,20);
$total = count($items);

$col1 = ???; $col2 = ???; $col3 = ???;

// $col1 must be an array of (1,2,3,4...)
// $col2 must be an array of (8,9,10,11...)
// $col3 must be an array of (15,16,17,18...)

COL1       COL2        COL3
1          8           15
2          9           16
3          10          17
4          11          18
5          12          19
6          13          20
7          14

以上是我想要实现的一个直观的例子。基本上,对于数组中任何给定数量的项目以及任何给定数量的列,如何生成尽可能相等长度的n个数组(等于列数)。如果不能使用相等的长度(如上例所示),它们必须尽可能均匀地展开,最后一个数组必须最短。

如果我在上面的示例中构建$ col1 / 2/3的任何指导将非常感激!

请忽略我使用范围和整数生成数组的事实 - 这只是为了简化示例。假设数组将包含字符串。

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

您确实想使用array_chunk,但您需要自己计算块大小:

list($col1, $col2, $col3) = array_chunk($items, ceil($total / $columns));

答案 1 :(得分:0)

我想你可能想要array_chunk

list($col1,$col2,$col3)=array_chunk($arrofstrings,$colcount);

答案 2 :(得分:0)

$itemsInColumn = ceil($total / $columns);

答案 3 :(得分:0)

$columns = 3;
$items = range(1, 20);

$rows = array_chunk($items, $columns);

$columns = array();
foreach ($rows as $row) {
    for ($i = 0; $i < $columns; $i++) {
        $columns[$i][] = $row[$i];
    }
}