php - 重组数组的最快方法?

标签 php arrays multidimensional-array grouping implode

我有一个可以包含多个项目的数组,例如:

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
etc

我需要最快的方法来重构这个数组,使其最多包含 X 个项目。所以如果我说 X 是 3,那么结果数组一定是:

Item 1 , Item 2
Item 3, Item 4
Item 5, Item 6
etc

或者如果它有 7 个项目,则为:

Item 1 , Item 2, Item 3,
Item 4, Item 5, 
Item 6, Item 7

最简单的方法是什么?

我是从这个开始的,但似乎真的必须有更简单的方法:

foreach ($addressParts as $part)
{
    if (empty($part)) continue;
    if (empty($addressLines[$count]))  $addressLines[$count] = '';
    $addressLines[$count] .= $part;
    $count++;
    if ($count > 2) $count = 0;
}

另外,这也行不通,因为你最终会得到这样的结果:

item 1, item 4, item 7
item 2, item 5
item 3, item 6

...这是错误的。有什么想法吗?

更新

如果我开始:

Array
(
    [0] => item 1
    [1] => item 2
    [2] => item 3
    [3] => item 4
    [4] => item 5
    [5] => item 6
    [6] => item 7
)

我想结束:

Array
(
    [0] => item 1, item 2, item 3
    [1] => item 4, item 5
    [2] => item 6, item 7
)

有意义吗?

最佳答案

此函数根据您的示例将元素组合到一个新数组中。它处理任意数量的输入元素。

function ReduceArray($input, $length) {
        $frac = $length / count($input);
        $frac = $frac + 0.0001;    // Offset for float calculations
        $index = 0.0;

        // Copy the elements, rolling over on $index
        $temp = array();
        foreach ($input as $part) {
                $i= floor($index);
                if (!isset($temp[$i])) {
                        $temp[$i] = array($part);
                } else {
                        $temp[$i][] = $part;
                }
                $index += $frac;
        }

        // Combine the sub arrays
        $output = array();
        foreach ($temp as $line) {
            $output[] = implode(', ', $line);
        }
        return $output;
}

$input = array('Item 1',  'Item 2',  'Item 3',  'Item 4',  'Item 5',  'Item 6', 'Item 7');
$output = ReduceArray($input, 3);
print_r($output);

输出

Array
(
    [0] => Item 1, Item 2, Item 3
    [1] => Item 4, Item 5
    [2] => Item 6, Item 7
)

根据给定的输出编辑“固定”输出。

编辑 九个元素见评论,最多测试 12 个元素。感谢教派

关于php - 重组数组的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19684203/

相关文章:

c++ - 返回使用 boost.assign 初始化的匿名 tr1 数组

php - 将电子邮件地址输入 MYSQL 数据库

c - 在 C 中从双指针(指针到指针)分配 Int

javascript - 网站中具有电子表格功能的动态表

arrays - 如何访问数组 NODE JS 中的对象

arrays - Matlab 最后一维访问 ndimensions 矩阵

c - 对齐结构数组以制作表格

javascript - 在坐标的相对位置显示矩阵的算法

php - 如何根据主表中的id从另一个表中选择两个附加列?

php - mysql php按3个独立字段中最高的排序