I have two arrays $a and $b
$a = [ '0' => [ 'name'=>'Apple', 'id' => 1 ], '1' => [ 'name'=>'Banana', 'id' => 2 ], '2' => [ 'name' => 'orange', 'id' => 3 ] ];
AND
$b = [ '0' => [ 'price'=> 20, 'a_id' => 2 ], '1' => [ 'price'=> 10, 'a_id' => 3 ], '3' => [ 'price'=> 30, 'a_id' => 1 ] ];
I am trying to create another array with mapping with id(array $a), a_id (array $b), where my output will looks like:
$a = [ '0' => [ 'id' => 1 'name'=>'Apple', 'price' => 30 ], '1' => [ 'id' => 2 'name'=>'Banana', 'price' => 20 ], '2' => [ 'id' => 3 'name' => 'orange', 'price' => 10 ] ];
I have tried by array map
$combined = array_map(null,$a,$b);
But this result is not my desire result. How can I map my 1st array with 2nd array related by $a['id'] = $b['a_id']
?
Advertisement
Answer
This should work, also if there’s no price for an item in the array $b then the default price 0 will be added.
<?php $result = []; $t = array_column($b, 'a_id'); foreach($a as $k => $v) { $index = array_search($v['id'], $t); $v['price'] = $index !== FALSE ? $b[$index]['price'] : 0; $result[] = $v; } print_r($result); ?>
Result:
( [0] => Array ( [name] => Apple [id] => 1 [price] => 30 ) [1] => Array ( [name] => Banana [id] => 2 [price] => 20 ) [2] => Array ( [name] => orange [id] => 3 [price] => 10 ) )