duancan1950 2015-10-09 03:23
浏览 63
已采纳

使用PHP合并多个关联数组

Recently I've come across a question about merging multiple associative arrays into one.

Following is part of my code

//The Arrays ( Top 8 from the list )
$arr1["XMLResultColumn"]["1"]["Series"] = "Column1";
$arr2["XMLResultColumn"]["1"]["Series"] = "Column2";
$arr3["XMLResultColumn"]["1"]["Categories"] = "Column3";
$arr4["XMLResultColumn"]["1"]["Values"] = "Column4";
$arr5["XMLResultColumn"]["1"]["SecondaryValues"] = "Column5";
$arr6["XMLResultColumn"]["2"]["Series"] = "Column1";
$arr7["XMLResultColumn"]["2"]["Series"] = "Column2";
$arr8["XMLResultColumn"]["2"]["Categories"] = "Column3";

I have tried grouping them up using array_merge_recursive inside a loop like the following

$arr9 = array();
for( $i = 1 ; $i < 9 ; $i++ ) {
    $arr9 = array_merge_recursive( $arr9 , ${"arr$i"} );
}

The $arr9 outputs as following:

Array ( [XMLResultColumn] => Array ( [1] => Array ( [Series] => Column1 ) [2] => Array ( [Series] => Column2 ) [3] => Array ( [Categories] => Column3 ) [4] => Array ( [Values] => Column4 ) [5] => Array ( [SecondaryValues] => Column5 ) [6] => Array ( [Series] => Column1 ) [7] => Array ( [Series] => Column2 ) [8] => Array ( [Categories] => Column3 ) ) )

I expected the result to be:

Array ( [XMLResultColumn] => Array ( [1] => Array ( [Series] => Array ( [0] => Column1 [1] => Column2 ) [Categories] => Array ( [0] => Colomn3 ) [Values] => Array ( [0] => Column4 ) [SecondaryValues] => Array ( [0] => Column5 ) ) [2] => Array ( [Series] => Array ( [0] => Column1 [1] => Column2 ) [Categories] => Array ( [0] => Colomn3 ) ) ) )

Is there any way to produce the expected output as above? Any help is appreciated!

Thank you for reading this question.

  • 写回答

1条回答 默认 最新

  • doujiu7680 2015-10-09 05:21
    关注

    Here is the code, it uses 6 loops.This is because of array structure. But nothing is hardcoded, if required, its scalable.

        $arr1["XMLResultColumn"]["1"]["Series"] = "Column1";
        $arr2["XMLResultColumn"]["1"]["Series"] = "Column2";
        $arr3["XMLResultColumn"]["1"]["Categories"] = "Column3";
        $arr4["XMLResultColumn"]["1"]["Values"] = "Column4";
        $arr5["XMLResultColumn"]["1"]["SecondaryValues"] = "Column5";
        $arr6["XMLResultColumn"]["2"]["Series"] = "Column1";
        $arr7["XMLResultColumn"]["2"]["Series"] = "Column2";
        $arr8["XMLResultColumn"]["2"]["Categories"] = "Column3";
    
    
        $arr9 = $a = $a1 = array();
    
        for ($i = 1; $i < 9; $i++) {
            $a[] = implode(",", array_keys(${"arr$i"}["XMLResultColumn"]));
        }
    
    
        $a = array_values(array_unique($a));
    
        foreach ($a as $key => $val) {
            for ($i = 1; $i < 9; $i++) {
                if (array_key_exists($val, ${"arr$i"}["XMLResultColumn"]))
                    if (array_key_exists($val, $a1)) {
                        if (!in_array(implode(",", array_keys(${"arr$i"}["XMLResultColumn"][$val])), $a1[$val]))
                            $a1[$val][] = implode(",", array_keys(${"arr$i"}["XMLResultColumn"][$val]));
                    } else
                        $a1[$val][] = implode(",", array_keys(${"arr$i"}["XMLResultColumn"][$val]));
            }
        }
    
        foreach ($a1 as $key => $val) {
            foreach ($val as $val1) {
                for ($i = 1; $i < 9; $i++) {
                    if (array_key_exists($key, ${"arr$i"}["XMLResultColumn"]))
                        if (array_key_exists($val1, ${"arr$i"}["XMLResultColumn"][$key]))
                            $arr9[$key][$val1][] = ${"arr$i"}["XMLResultColumn"][$key][$val1];
                }
            }
        }
    print_r($arr9);
    

    output is

    Array
    (
    [1] => Array
        (
            [Series] => Array
                (
                    [0] => Column1
                    [1] => Column2
                )
    
            [Categories] => Array
                (
                    [0] => Column3
                )
    
            [Values] => Array
                (
                    [0] => Column4
                )
    
            [SecondaryValues] => Array
                (
                    [0] => Column5
                )
    
        )
    
    [2] => Array
        (
            [Series] => Array
                (
                    [0] => Column1
                    [1] => Column2
                )
    
            [Categories] => Array
                (
                    [0] => Column3
                )
    
        )
    
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿