2016-11-25 110 views
-1

我想在PHP中组合两个多维数组。在PHP中合并两个多维数组

的print_r($ array_a):

Array 
(
[0] => Array 
    (
     [0] => A 
     [1] => 0 
     [2] => 1047 
    ) 

[1] => Array 
    (
     [0] => B 
     [1] => 0 
     [2] => 279 
    ) 

[2] => Array 
    (
     [0] => C 
     [1] => 0 
     [2] => 68 
    ) 

[3] => Array 
    (
     [0] => D 
     [1] => 0 
     [2] => 4 
    ) 

) 

的print_r($ array_b):

Array 
(
[0] => Array 
    (
     [0] => A 
     [1] => 76 
     [2] => 0 
    ) 

[1] => Array 
    (
     [0] => B 
     [1] => 170 
     [2] => 0 
    ) 

[2] => Array 
    (
     [0] => C 
     [1] => 15 
     [2] => 0 
    ) 

[3] => Array 
    (
     [0] => D 
     [1] => 210 
     [2] => 0 
    ) 
[4] => Array 
    (
     [0] => E 
     [1] => 287 
     [2] => 0 
    ) 

) 

然后将其合并,其结果应该是这样的:

Array 
(
[0] => Array 
    (
     [0] => A 
     [1] => 76 
     [2] => 1047 
    ) 

[1] => Array 
    (
     [0] => B 
     [1] => 170 
     [2] => 279 
    ) 

[2] => Array 
    (
     [0] => C 
     [1] => 15 
     [2] => 68 
    ) 

[3] => Array 
    (
     [0] => D 
     [1] => 210 
     [2] => 4 
    ) 
[4] => Array 
    (
     [0] => E 
     [1] => 287 
     [2] => 0 
    ) 

) 

所以逻辑关键是基于每个数组(A,B,C,D)的第一个值合并两个数组。如果只有一个数组只属于一个数组(例如,array_b上的“E”),我只需添加它们即可。 我尝试这样做:

foreach($array_a as $a=>$array_now){ 
     foreach($array_b as $b=>$array_before){ 
      if($array_now[0] == $array_before[0]){ 
       $array_a[$a] = [$array_before[0], $array_before[1], $array_now[2]]; 
      } 
     } 
    } 

但我似乎无法添加缺少的阵列(在$ array_b第5阵列包含“E”)。

+0

你正在使用哪个PHP版本? –

+2

你可以通过手动foreach和合并它 – RJParikh

+0

[PHP:合并2多维数组]可能的副本(http://stackoverflow.com/questions/1558291/php-merge-2-multidimensional-array) –

回答

0

您可以使用多个array_maps实现这一

$c = array_map(function() { 
    return array_map(function() { 
     foreach (func_get_args() as $arg) { 
      if ($arg) return $arg; 
     } 
     return func_get_arg(0); 
    }, ...func_get_args()); 
}, $a, $b); 

这段代码也将有超过$a$b工作 - 就像你想添加尽可能多的数组作为PARAM

1

使用下面的代码,将帮你

$array_a = []; 
$array_a[0][0] = 'A'; 
$array_a[0][1] = 0; 
$array_a[0][2] = 1047; 

$array_a[1][0] = 'B'; 
$array_a[1][1] = 0; 
$array_a[1][2] = 279; 

$array_a[2][0] = 'C'; 
$array_a[2][1] = 0; 
$array_a[2][2] = 68; 

$array_a[3][0] = 'D'; 
$array_a[3][1] = 0; 
$array_a[3][2] = 4; 


$array_b = []; 
$array_b[0][0] = 'A'; 
$array_b[0][1] = 76; 
$array_b[0][2] = 0; 

$array_b[1][0] = 'B'; 
$array_b[1][1] = 70; 
$array_b[1][2] = 0; 

$array_b[2][0] = 'C'; 
$array_b[2][1] = 15; 
$array_b[2][2] = 0; 

$array_b[3][0] = 'D'; 
$array_b[3][1] = 210; 
$array_b[3][2] = 0; 

$array_b[3][0] = 'E'; 
$array_b[3][1] = 287; 
$array_b[3][2] = 0; 

$array_b[4][0] = 'E'; 
$array_b[4][1] = 2870; 
$array_b[4][2] = 0; 


$cnt = 0; 
if(count($array_b) > $array_a){ 
    $cnt = count($array_b); 
}else{ 
    $cnt = count($array_a); 
} 


$array_new = []; 
for($i=0; $i <= $cnt; $i++){ 
    $array_new[$i] = []; 

    if(isset($array_a[$i][0])){ 
     $array_new[$i][0] = $array_a[$i][0]; 
    }else{ 
     $array_new[$i][0] = $array_b[$i][0];  
    } 

    if(isset($array_b[$i][1])){ 
     $array_new[$i][1] = $array_b[$i][1]; 
    }else{ 
     $array_new[$i][1] = 0; 
    } 

    if(isset($array_a[$i][2])){ 
     $array_new[$i][2] = $array_a[$i][2]; 
    }else{ 
     $array_new[$i][2] = 0; 
    } 


} 

echo "<pre>"; 
print_r($array_new); 

希望这会有所帮助!

0

很抱歉,但上述所有的解决方案不工作,我想这呆着,通过使用此代码:

$result = array(); 
    if (count($array_a) > count($array_b)){ 
     foreach($array_a as $a=>$array_now){ 
      foreach($array_b as $b=>$array_before){ 
       if($array_now[0] == $array_before[0]){ 
        $array_a[$a] = [(string)$array_before[0], (int)$array_before[1], (int)$array_now[2]]; 
       } 
      } 
     } 
     $result = $array_a; 
    } else { 
     foreach($array_b as $a=>$array_now){ 
      foreach($array_a as $b=>$array_before){ 
       if($array_now[0] == $array_before[0]){ 
        $array_b[$a] = [(string)$array_before[0], (int)$array_now[1], (int)$array_before[2]]; 
       } 
      } 
     } 
     $result = $array_b; 
    } 

感谢你们所有的反应。