2017-04-13 12 views
0

2つの配列を組み合わせて別の配列を得る方法はありますか?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 
     ) 
    ) 

3番目の配列は、キー名二つの第一の配列をマージします一致 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

関連する問題