2015-10-09 26 views
0

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

以下是我的代码部分

//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"; 

我试图将它们组合起来使用array_merge_recursive一个循环中像下面

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

$arr9输出如下:

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

我预计结果是:

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

有没有什么方法可以产生如上所述的预期输出? 任何帮助表示赞赏!

谢谢你阅读这个问题。

+0

您可以粘贴的''代替的var_dump($ arr9)''的print_r($ arr9)。?? –

+0

问题已更新,谢谢 – MiKeNeko

+1

您正试图实现一些* array_PUSH_recursive *结果。不能用原生函数做到这一点(一些hackish回调或需要嵌套循环)。我会退后一步,看看我是否无法正确收集这些数据。如果你在每个赋值的末尾添加'[]'并且除去数组数字(push into the array),你会得到你需要的东西(例如:'$ arr ['xml'] ['0'] [ 'something'] [] ='string1'; $ arr ['xml'] ['0'] ['something'] [] ='string2'; ...') – shudder

回答

1

这是代码,它使用6个循环。这是因为数组结构。但没有硬编码,如果需要,它的可扩展性。

$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); 

输出

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 
      ) 

    ) 

) 
+0

不错,+1为你的努力。当我回到我的办公室时,我会尝试用我的xml池来查看是否有任何性能问题。 – MiKeNeko

+0

3个循环是额外的,因为我没有硬编码,你可以添加任意数量的索引,如0,1,2,3,4,并且对于每个索引,任何数量的子索引,如系列,系列1,系列2等等。 –