2017-04-13 85 views
0

有沒有辦法,以下兩個數組獲得另一個數組,這是兩個數組的組合?php - 從數組中追加值到數組如果值匹配

陣列1:

Array 
(
[0] => Array 
    (
     [a_id] => 9 
     [name] => Mario Lopez 
    ) 

[1] => Array 
    (
     [a_id] => 8 
     [name] => Lisa Turtle 
    ) 

) 

陣列2:

Array 
(
[0] => Array 
    (
     [b_id] => 1 
     [name] => AC Slater 
    ) 

[1] => Array 
    (
     [b_id] => 2 
     [name] => Lisa Turtle 
    ) 
[2] => Array 
    (
     [b_id] => 3 
     [name] => Kelly Kapowski 
    ) 
) 

我想獲得:

Array 
    (
    [0] => Array 
     (
      [b_id] => 1 
      [name] => AC Slater 
     ) 

    [1] => Array 
     (
      [a_id] => 8 
      [b_id] => 2 
      [name] => Lisa Turtle 
     ) 
    [2] => Array 
     (
      [b_id] => 3 
      [name] => Kelly Kapowski 
     ) 
    [3] => Array 
     (
      [a_id] => 9 
      [name] => Mario Lopez 
     ) 
    ) 

第三陣列合併兩個第一陣列,其中鍵名匹配 我還沒有找到builtin function,並嘗試此解決方案沒有成功塞斯:combine 2 associative arrays where values match

謝謝,

編輯:對不起,我忘了添加馬里奧洛佩茲。 我的嘗試是:

function array_extend($a, $b) { 
    foreach($b as $k=>$v) { 
     if(is_array($v)) { 
      if(!isset($a[$k]) OR isset($v[0])) { 
       $a[$k] = $v; 
      } else { 
       $a[$k] = array_extend($a[$k], $v); 
      } 
     } else { 
      $a[$k] = $v; 
     } 
    } 
    return $a; 
} 
+0

你是什麼意思的「嘗試沒有成功這個解決方案」嗎?請展示你的嘗試並解釋它有什麼問題。謝謝。 – arkascha

+0

馬里奧洛佩茲會在哪裏? – OldPadawan

回答

1

這可能是你在找什麼,但作爲@OldPadawan已經在評論實際結果與提出一個不同的問題,指出了......

<?php 
$a = [ 
    [ 
     'a_id' => 9, 
     'name' => 'Mario Lopez' 
    ], 
    [ 
     'a_id' => 8, 
     'name' => 'Lisa Turtle' 
    ] 
]; 
$b = [ 
    [ 
     'b_id' => 1, 
     'name' => 'AC Slater' 
    ], 
    [ 
     'b_id' => 2, 
     'name' => 'Lisa Turtle' 
    ], 
    [ 
     'b_id' => 3, 
     'name' => 'Kelly Kapowski' 
    ] 
]; 
$c = $a; 
array_walk($b, function($be) use (&$c) { 
    $done = false; 
    array_walk($c, function(&$ce) use($be, &$done) { 
     if ($ce['name'] == $be['name']) { 
      $ce['b_id'] = $be['b_id']; 
      $done = true; 
     } 
    }); 
    if (! $done) { 
     array_push($c, $be); 
    } 
}); 
print_r($c); 

上面代碼的輸出是:

Array 
(
    [0] => Array 
     (
      [a_id] => 9 
      [name] => Mario Lopez 
     ) 

    [1] => Array 
     (
      [a_id] => 8 
      [name] => Lisa Turtle 
      [b_id] => 2 
     ) 

    [2] => Array 
     (
      [b_id] => 1 
      [name] => AC Slater 
     ) 

    [3] => Array 
     (
      [b_id] => 3 
      [name] => Kelly Kapowski 
     ) 

) 
+0

謝謝你arkascha。我確實犯了一個錯誤。 – Pierre