简体   繁体   English

合并/合并具有相同密钥 PHP 的 arrays

[英]Combine/Merge arrays that have the same keys PHP

I have an array that has some keys that are repeating multiple times.我有一个数组,其中有一些重复多次的键。 Would like to combine them so that I can have them in one array, within the same array.想将它们组合起来,以便我可以将它们放在同一个数组中的一个数组中。 I have an array of this type;我有一个这种类型的数组;

Array
(
    [Shoes] => Array
        (
            [POLO] => Array
                (
                    [0] => Size5
                )

        )

)
Array
(
    [Shoes] => Array
        (
            [FUBU] => Array
                (
                    [0] => size6
                )

        )

)
Array
(
    [Bag] => Array
        (
            [HPBAG] => Array
                (
                    [0] => Black
                )

        )

)
Array
(
    [Bag] => Array
        (
            [HPBAG] => Array
                (
                    [0] => White
                )

        )

)

I would like an output of the following kind;我想要以下类型的 output;

Array
    (
        [Shoes] => Array
            (
                [POLO] => Array
                    (
                        [0] => size5
                    )
                [FUBU] => Array
                    (
                        [0] => size6
                    )
    
            )

        [Bag] => Array
            (
                [HPBAG] => Array
                    (
                        [0] => Black
                        [1] => White
                    )
    
            )
    
    )

I have tried array_merge, array_merge_recursive but all are not working.我试过array_merge、array_merge_recursive,但都不起作用。

foreach ($county as $value) { print_r(array_merge($value)); } //$value contains the array 

foreach ($county as $value) { print_r(array_merge_recursive($value)); } //$value contains the array 

Kindly assist if you have an idea on how to solve this in PHP.如果您对如何在 PHP 中解决此问题有任何想法,请提供帮助。

You could do it with a few nested array_walk() calls:你可以通过几个嵌套的array_walk()调用来做到这一点:

$arr=array(array("Shoes" => array("POLO" => array("Size5"))),
      array("Shoes" => array("FUBU" => array("size6"))),
      array("Bag" => array("HPBAG" => array("Black"))),
      array("Bag" => array("HPBAG" => array("White"))));

$res=[];
array_walk($arr,function($a) use (&$res){ 
    array_walk($a, function($ar,$type) use (&$res){
        array_walk($ar, function ($arr,$brand) use (&$res,$type){
            $res[$type][$brand]=array_merge($res[$type][$brand]??[],$arr);
        });
    });
});

print_r($res);

See the demo here: https://rextester.com/RFLQ18142在此处查看演示: https://rextester.com/RFLQ18142

It produces this result:它产生这个结果:

Array
(
    [Shoes] => Array
        (
            [POLO] => Array
                (
                    [0] => Size5
                )

            [FUBU] => Array
                (
                    [0] => size6
                )

        )

    [Bag] => Array
        (
            [HPBAG] => Array
                (
                    [0] => Black
                    [1] => White
                )

        )

)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM