在php中合并重复的数组值

时间:2018-06-14 18:26:57

标签: php multidimensional-array array-merge

我有一个多维数组,如:

Array
(
    [0] => Array
        (
            [division] => Mymensingh
            [A] => 1
        )    
    [1] => Array
        (
            [division] => Dhaka
            [A] => 5
        )
    [2] => Array
        (
            [division] => Mymensingh
            [B] => 2
            [C] => 5
        )
)

需要找到相同的除法索引值并将它们合并到一个数组中。可能有PHP函数来做到这一点。我无法理解。 现在从这个数组我希望输出为:

Array
    (
        [0] => Array
            (
                [division] => Mymensingh
                [A] => 1
                [B] => 2
                [C] => 5
            )    
        [1] => Array
            (
                [division] => Dhaka
                [A] => 5
            )
    )

子数组的索引可以不同,也可以是不同数量的。

2 个答案:

答案 0 :(得分:4)

我认为迭代数组并持续合并由" division"分隔的条目相对简单:

function mergeByDiscriminator($input, $discriminator = 'division') {
    $result = [];

    foreach ($input as $array) {
        $key = $array[$discriminator];
        $result[$key] = array_merge(
            array_key_exists($key, $result) ? $result[$key] : [],
            $array
        );
    }

    return array_values($result);
}

$result = mergeByDiscriminator($input); // $input is your array

答案 1 :(得分:0)

我能想到的唯一解决方案如下。当然可能还有其他可行的解决方案,但我会从我的角度给出一个解决方案。

$array = array(
   '0' => array (
       'division' => 'Mymensingh',
       'A' => 1
   ),
   '1' => array (
       'division' => 'Dhaka',
       'A' => 5
   ),
   '2' => array (
       'division' => 'Mymensingh',
       'B' => 2,
       'C' => 5
   ),
);

$result = array();
foreach ($array as $arr) {
    if (!is_array($result[$arr['division']])) $result[$arr['division']] = array();

    foreach ($arr as $key => $value) {
        $result[$arr['division']][$key] = $value;
    }
}

echo "<pre>"; print_r($result); 

上面的代码为您提供了所需的输出。请试一试。

希望这有帮助。