2016-09-21 113 views
0

很长时间无法解决smth看起来很简单的问题...我想合并一个二维数组。 的例子:在PHP中合并二维数组

$arr1 = { 
    [532] = 
    { 
    [0] = "11" 
    [1] = "12" 
    } 
    [273] = 
    { 
    [0] = "99" 
    } 
} 
$arr2 = { 
    [532] = 
    { 
    [0] = "11" 
    [1] = "13" 
    } 
} 

和合并的结果应该是,在地图上常见的按键,完全一样的阵列:

$result = { 
    [532] = 
    { 
    [0] = 
    {  
     [0] = "11" 
     [1] = "12" 
    } 
    [1] = 
    { 
     [0] = "11" 
     [1] = "13" 
    } 
    } 
    [273] 
    [0] = 
    {  
     [0] = "99" 
    } 
    [1] = 
    { 

    } 
} 

我尝试sometihng这样的:

$result = $arr1; 
    foreach ($arr2 as $key => $value) { 
     $result[$key] = isset($result[$key]) ? array_merge([$result[$key]], [$value]) : [$value]; 
    } 

但它不工作,如果$ arr2是空的:(

+0

你是什么意思'如果$ arr2是空的'。如果你没有第二个数组,为什么要合并? – jitendrapurohit

回答

1

可能是这样的

$arr1 = { 
     [532] = 
     { 
     [0] = "11" 
     [1] = "12" 
     } 
     [273] = 
     { 
     [0] = "99" 
     } 
    } 
    $arr2 = { 
     [532] = 
     { 
     [0] = "11" 
     [1] = "13" 
     } 
    } 

    $newarray = array(); 
    foreach ($arr1 as $key => $value) { 
     $cu = $arr1[$key]; 

     $newarray[$key][] = $cu; 

     if(!isset($arr2[$key])) { 
      $newarray[$key][] = array(); 
     } 
     else { 
     $newarray[$key][] = $arr2[$key]; 
     } 
    } 

foreach ($arr2 as $key => $value) { 
      if(!isset($newarray[$key])) { 
      $newarray[$key][] = $arr2[$key]; 
      } 
     } 
+1

Arg,你的权利 - 想想我现在已经有了 - 没有f5按钮就有点棘手! –

+0

看看你在哪里用它 - 好吧 –

+0

好吧,但如果第一个数组将是空的呢?我总是想要像例子那样得到结构数组 –

1

对于第二阵列检查,则需要使用isset()任一阵列设置或不:

实施例:

<?php 
$arr1 = array('532'=>array('11','12'),'273'=>array('99')); 
$arr2 = array('532'=>array('11','13')); 

$newArr = array(); 
foreach ($arr1 as $key => $value) { 
    if(isset($arr2[$key])){ 
     $newArr[$key][] = $value; 
     $newArr[$key][] = $arr2[$key]; 
    } 
    else{ 
     $newArr[$key] = $value; 
    } 
} 
echo "<pre>"; 
print_r($newArr); 
?> 

结果:

Array 
(
    [532] => Array 
     (
      [0] => Array 
       (
        [0] => 11 
        [1] => 12 
       ) 

      [1] => Array 
       (
        [0] => 11 
        [1] => 13 
       ) 

     ) 

    [273] => Array 
     (
      [0] => 99 
     ) 

) 

更进一步,我F你想合并这两个相同的索引比你可以使用array_merge()一些东西像:

<?php 
$arr1 = array('532'=>array('11','12'),'273'=>array('99')); 
$arr2 = array('532'=>array('11','13')); 

$newArr = array(); 
foreach ($arr1 as $key => $value) { 
    if(isset($arr2[$key])){ 
     $newArr[$key][] = array_merge($value,$arr2[$key]);  
    } 
    else{ 
     $newArr[$key] = $value; 
    } 
} 
echo "<pre>"; 
print_r($newArr); 
?> 

结果:

Array 
(
    [532] => Array 
     (
      [0] => Array 
       (
        [0] => 11 
        [1] => 12 
        [2] => 11 
        [3] => 13 
       ) 

     ) 

    [273] => Array 
     (
      [0] => 99 
     ) 

) 

需要注意的是,IST脚本,会给你造成的,你需要独特的索引。 第二个脚本将为您提供一个数组中的所有值。