使用PHP合并多个关联数组

使用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.

最近我遇到了一个关于将多个关联数组合并为一个的问题。 p>

以下是我的代码的一部分 p>

  //数组(列表中的前8位)
 $ arr1 [“XMLResultColumn”] [“1”] [“ 系列“] =”Column1“; 
 $ arr2 [”XMLResultColumn“] [”1“] [”系列“] =”Column2“; 
 $ arr3 [”XMLResultColumn“] [”1“] [”类别“  ] =“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“; 
  code>  pre> 
 
 

我尝试使用它们进行分组 循环中的 array_merge_recursive code>,如下所示 p>

  $ arr9 = array(); 
for($ i = 1; $ i&lt; 9; $  i ++){
 $ arr9 = array_merge_recursive($ arr9,$ {“arr $ i”}); 
} 
  code>  pre> 
 
 

$ arr9 输出如下 ing: p>

  Array([XMLResultColumn] =&gt; 数组([1] =&gt;数组([Series] =&gt; Column1)[2] =&gt;数组([Series] =&gt; Column2)[3] =&gt;数组([Categories] =&gt; Column3)  [4] =&gt;数组([Values] =&gt; Column4)[5] =&gt;数组([SecondaryValues] =&gt; Column5)[6] =&gt;数组([Series] =&gt; Column1)[7  ] =&gt;数组([系列] =&gt;第2列)[8] =&gt;数组([类别] =&gt;第3列)))
  code>  pre> 
 
 

I 期望结果为: p>

  Array([XMLResultColumn] =&gt; Array([1] =&gt; Array([Series] =&gt; Array([0] =  &gt; Column1 [1] =&gt; Column2)[Categories] =&gt;数组([0] =&gt; Colomn3)[Values] =&gt;数组([0] =&gt; Column4)[SecondaryValues] =&gt;数组 ([0] =&gt; Column5))[2] =&gt;数组([Series] =&gt;数组([0] =&gt; Column1 [1] =&gt; Column2)[Categories] =&gt;数组([]  0] =&gt; Colomn3))))
  code>  pre> 
 
 

有没有办法产生如上所述的预期输出? 非常感谢! p> \ n

感谢您阅读此问题。 p> d 四>

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
            )

    )

)