首页 > 解决方案 > PHP - 如何通过对数组中的相同元素进行分组来创建多维数组?

问题描述

例如,我有一个数组$tempArr,其元素如图所示:

Array
(
 [0] => 1
 [1] => 1
 [2] => 1
 [3] => 2
 [4] => 2
 [5] => 2
 [6] => 1
 [7] => 1
 [8] => 2
 [9] => 2
 [10] => 1
 ....
)

我想将其更改为具有相同元素按顺序组合在一起的多维数组结构。

Array
(
[0] => Array
    (
        [0] => 1
        [1] => 1
        [2] => 1
    )

[1] => Array
    (
        [0] => 2
        [1] => 2
        [2] => 2
    )

[2] => Array
    (
        [0] => 1
        [1] => 1
    )

[3] => Array
    (
        [0] => 2
        [1] => 2
    )

[4] => Array
    (
        [0] => 1
    )
....
)

请帮忙。我已经为此工作了几个小时,但仍然无法正确处理。

标签: phparrays

解决方案


非常简单 - 只需循环遍历元素,如果当前元素与前一个元素不同 - 然后增加索引,在该索引下将值添加到输出数组。

$input = [1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 1];

$output = [];
$idx = -1; // init with -1, so we get a start index of 0 after first increment
$prev = null; // init $prev with a value that won't be equal to the first
              // array value in any case
foreach($input as $val) {
    if($prev !== $val) {
        ++$idx;
    }
    $output[$idx][] = $val;
    $prev = $val; // set current item as new previous one
}

print_r($output);

https://3v4l.org/c2Irh


推荐阅读