2015-04-23 175 views
0

我试图合并包含多维数组两个数组,并创建了下”PHP结合多维数组

这里格式的第三组是第一个多维数组:

Array 
(
    [USA1] => Array 
    (
     [0] => NewYork 
     [1] => MASS 
    ) 

[USA2] => Array 
    (
     [0] => NewYork 
    ) 

[USA3] => Array 
    (
     [0] => NewYork 
    ) 

) 

这是我第二多维数组:

Array 
(
    [USA1] => Array 
     (
      [NewYork] => Array 
       (
       [0] => Array 
        (
         [0] => Town1 
         [1] => Town2 
        ) 
      ) 

     [MASS] => Array 
      (
       [0] => Array 
        (
         [0] => Town3 
         [1] => Town4 
        ) 
      ) 
    ) 

[USA2] => Array 
    (
     [NewYork] => Array 
      (
       [0] => Array 
        (
         [0] => Town1 
         [1] => Town2 
        ) 
      ) 
    ) 

现在,我要让这将基于共同存在键合并第三阵列如果密钥匹配的话,我需要分配上。 e以循环方式给这个数组的值:

对于例如 如果在USA1键下的值是“NewYork”,那么我必须从另一个数组中分配“Town1”值。由于这个关键也存在于USA2下,所以我必须分配“Town2”(循环赛时尚)。如果有更多的“纽约”值存在,并且如果有更多的值如“城镇9”,那么我们必须分配该值,如果不存在,那么我必须指定“城镇1”值。 如果密钥只出现一次,如“MASS”,那么我们需要在这种情况下删除第二个值为“Town4”的值。

Array 
    (
     [USA1] => Array 
      (
       [0] => NewYork => Town1 
       [1] => Mass => Town3 
      ) 

    [USA2] => Array 
     (
      [0] => NewYork => Town2 
     ) 

    [USA3] => Array 
     (
      [0] => NewYork =>Town1 
     ) 

) 

注:所有除3一个阵列输出从print_r的命令

非常感谢帮助。谢谢。

+0

将循环和赋值用于初始空数组。 – Justinas

回答

1

我不完全清楚你要求什么。这不是真正的合并,因为在最终数组中[USA3]应该是空的,因为array2中没有匹配的键。并且您要求将值分配给循环,这不是我期望数组合并行为的方式。

我假设你想要做的是平均分布城市之间的城镇。 基于这个假设,我只使用了来自USA1的数组2,但是这会产生你提供的第三个数组。我已更新代码示例以合并第二个数组。

$map = array(); 
foreach ($array2 as $usa => $cities) 
{ 
    $map = $cities + $map; 
} 

$towns = array(); 

foreach($array1 as $usa => $cityArray) 
{ 
    while(!empty($cityArray)) 
    { 
     $city = array_shift($cityArray); 
     if(empty($towns[$city])) 
      $towns[$city] = $map[$city][0]; 

     $array3[ $usa ][] = array($city => array_shift($towns[$city])); 
    } 
} 

这工作,但如果你有$数组2 [“US1”]和$数组2不同的值[“US2”],那么你应该上方将其发送到代码之前合并这两个数组。更新后的代码会合并第二个数组。

+0

谢谢你“jfadich”为你响应! 对不起,我有一个类型,我没有复制上面提到的Array2粘贴USA3。 我厌倦了使用你的代码,它会在第2行抛出一个错误“$ towns = [];”以及在if循环中。所以我无法运行你的代码。 它并不指向我确切的错误信息。 – newbie83

+0

您必须运行较早版本的php。我更新了代码以在5.4以前的版本中工作。让我知道如果修复工作。 – jfadich

+0

再次感谢“jfadich”!! 看起来像现在错误已经消失,能够运行你的代码,但一旦我打印 print_r($ array3)foreach循环外我看到类似于上面提到的array2的所有数组。 但是,如果你帮我给像上面提到的Array 3 rd这样的输出,那将是很大的帮助! – newbie83