2016-11-25 8 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). И если есть массив, который принадлежит только одному из массива (например, «E» на 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] = [$array_before[0], $array_before[1], $array_now[2]]; 
      } 
     } 
    } 

Но я не могу показаться, чтобы добавить недостающий массив (5-й массив в $ array_b, которые содержат «E»).

+0

какая версия PHP вы используете? –

+2

вы можете сделать это вручную foreach и слить его – RJParikh

+0

Возможный дубликат [PHP: Merge 2 многомерных массивов] (http://stackoverflow.com/questions/1558291/php-merge-2-multidimensional-arrays) –

ответ

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 - просто добавьте столько массивов, как вы хотите, как парам

1

использовать ниже код, который будет help

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

Спасибо, ребята за все ваши реакции.

Смежные вопросы