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