PHP按值合并数组并合并它的子数组

时间:2015-08-26 08:15:29

标签: php arrays array-merge

我以为我对数组有一些了解。但看起来我没理解。或者我的脑袋不想工作。我有阵列:

[0] => Array
    (
        [key] => Person 1
        [values] => Array
            (
                [0] => Array
                    (
                        [0] => 1436821440000,12
                    )
            )
    )

[1] => Array
    (
        [key] => Person 2
        [values] => Array
            (
                [0] => Array
                    (
                        [0] => 1437562620000,24
                    )
            )
    )

[2] => Array
    (
        [key] => Person 3
        [values] => Array
            (
                [0] => Array
                    (
                        [0] => 1437080040000,10
                    )
            )
    )

[3] => Array
    (
        [key] => Person 1
        [values] => Array
            (
                [0] => Array
                    (
                        [0] => 1437082860000,1
                    )
            )
    )

 [4] => Array
    (
        [key] => Person 3
        [values] => Array
            (
                [0] => Array
                    (
                        [0] => 1437081840000,9
                    )
            )
    )

这就是我想要实现的目标:

    [0] => Array
    (
        [key] => Person 1
        [values] => Array
            (
                [0] => Array
                    (
                        [0] => 1436821440000,12
                        [1] => 1437082860000,1
                    )
            )
    )

[1] => Array
    (
        [key] => Person 2
        [values] => Array
            (
                [0] => Array
                    (
                        [0] => 1437562620000,24
                    )
            )
    )

[2] => Array
    (
        [key] => Person 3
        [values] => Array
            (
                [0] => Array
                    (
                        [0] => 1437080040000,10
                        [1] => 1437081840000,9
                    )
            )
    )

如何删除重复项并合并数据?

2 个答案:

答案 0 :(得分:1)

$result_arr = array();
foreach ($arr as $sub_arr) 
{
  $result_arr = array_merge($result_arr, $sub_arr);
  $result_arr = array_unique($result_arr);
}

答案 1 :(得分:0)

样本输入不会对deept子数组中包含的数据提供任何变化,因此,我将通过在数据中增加一些复杂性来演示代码段的实用性。

有效地,每次遇到新的key时,您都声明一个新行,其中包含key元素和一个带有空数组的values元素。为了将key识别为“遇到”,使用key值作为第一级键将新行分配给结果数组。

现在可以保证声明values子数组,内部循环将梳理更深的数组并将一个或多个(所有)深值推入各自的values子数组中-扁平时尚。

代码:(Demo

$array = [
    ['key' => 'Person 1', 'values' => [['1436821440000,12']]],
    ['key' => 'Person 2', 'values' => [['1437562620000,24']]],
    ['key' => 'Person 3', 'values' => [['1437080040000,10']]],
    ['key' => 'Person 1', 'values' => [['1437082860000,1'], ['1437082860000,2', '1437082860000,3']]],
    ['key' => 'Person 3', 'values' => [['1437081840000,9']]],
];

$result = [];
foreach ($array as $row) {
    if (!isset($result[$row['key']])) {
        $result[$row['key']] = ['key' => $row['key'], 'values' => []];
    }
    foreach ($row['values'] as $values) {
        array_push($result[$row['key']]['values'], ...$values);
    }
}
var_export(
    array_values($result)
);

输出:

array (
  0 => 
  array (
    'key' => 'Person 1',
    'values' => 
    array (
      0 => '1436821440000,12',
      1 => '1437082860000,1',
      2 => '1437082860000,2',
      3 => '1437082860000,3',
    ),
  ),
  1 => 
  array (
    'key' => 'Person 2',
    'values' => 
    array (
      0 => '1437562620000,24',
    ),
  ),
  2 => 
  array (
    'key' => 'Person 3',
    'values' => 
    array (
      0 => '1437080040000,10',
      1 => '1437081840000,9',
    ),
  ),
)