重组阵列的最快方法?

cod*_*ama 14 php arrays grouping implode multidimensional-array

我有一个数组,其中可以有几个项目,例如:

Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
etc
Run Code Online (Sandbox Code Playgroud)

我需要以最快的方式重组此数组,以便它最多包含X个项目.因此,如果我说X是3,那么结果数组必须是:

Item 1 , Item 2
Item 3, Item 4
Item 5, Item 6
etc
Run Code Online (Sandbox Code Playgroud)

或者如果它有7个项目,它将是:

Item 1 , Item 2, Item 3,
Item 4, Item 5, 
Item 6, Item 7
Run Code Online (Sandbox Code Playgroud)

最简单的方法是什么?

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

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

此外,这不起作用,因为你最终会得到这个:

item 1, item 4, item 7
item 2, item 5
item 3, item 6
Run Code Online (Sandbox Code Playgroud)

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

UPDATE

如果我开始:

Array
(
    [0] => item 1
    [1] => item 2
    [2] => item 3
    [3] => item 4
    [4] => item 5
    [5] => item 6
    [6] => item 7
)
Run Code Online (Sandbox Code Playgroud)

我想结束:

Array
(
    [0] => item 1, item 2, item 3
    [1] => item 4, item 5
    [2] => item 6, item 7
)
Run Code Online (Sandbox Code Playgroud)

合理?

Ste*_*n B 5

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

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);
Run Code Online (Sandbox Code Playgroud)

产量

Array
(
    [0] => Item 1, Item 2, Item 3
    [1] => Item 4, Item 5
    [2] => Item 6, Item 7
)
Run Code Online (Sandbox Code Playgroud)

根据给定的输出编辑"固定"输出.

编辑请参阅注释九个元素,最多可测试12个元素.谢谢sectus


Mir*_*vic 0

抱歉,它应该是一个评论,但我不能发表评论,也许是因为我的声誉......

当您有一个包含 7 个元素的数组时,您知道要将数组除以 3 还是必须找到除数?

编辑1 像这样的东西?:

$formatedAddress = array();
$divisor = 3;
$key = 0;
$counter =1;
foreach ($addressParts as $part)
{
    if(!empty($part){
        $formattedAddress[$key] = $part;
        if($counter != $divisor){
           $counter++;
        }else{
            $counter = 1;
            $key++;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

编辑2:

我发现了一些错误:

$formatedAddress = array();
$divisor = 3;
$key = 0;
$counter =1;
foreach ($addressParts as $part)
{
    if(!empty($part)){

    $formatedAddress[$key][] = $part;

    if($counter != $divisor){
       $counter++;
    }else{
        $counter = 1;
        $key++;
    }
    }
}
Run Code Online (Sandbox Code Playgroud)