Reputation: 2274
I have this array $a
:
[0] => Array
(
[param] => banana
[value] => yellow
)
[1] => Array
(
[param] => lemon
[value] => 3
)
[2] => Array
(
[param] => apple
[value] => 18
)
... and array $b
:
[0] => Array
(
[param] => banana
[value] => brown
)
[1] => Array
(
[param] => orange
[value] => 3
)
[2] => Array
(
[param] => lemon
[value] => 4
)
[3] => Array
(
[param] => pear
[value] => green
)
Array $c
should be a copy of $a
, but, if $b
contains certain params that are present in $a
, the values from $a
should be update with those from $b
.
So $c
would become:
[0] => Array
(
[param] => banana
[value] => brown
)
[1] => Array
(
[param] => lemon
[value] => 4
)
[2] => Array
(
[param] => apple
[value] => 18
)
Any tips?
Upvotes: 0
Views: 42
Reputation: 18557
You can use array-map with multiple arrays,
$c = array_filter(array_map(function ($a1, $b1) {
if ($a1['param'] == $b1['param']) {
$a1['value'] = $b1['value'];
return $a1;
} else {
return $a1;
}
}, $a, $b));
EDIT
$bData = array_column($b,'value','param'); // param as key and value as value
foreach($a as &$v){
$v['value'] = ($bData[$v['param']] ?? $v['value']); // php 7+
//or $v['value'] = (!empty($bData[$v['param']]) ? $bData[$v['param']] : $v['value']); // php 5.6 or previous
}
Output
Array
(
[0] => Array
(
[param] => banana
[value] => brown
)
[1] => Array
(
[param] => lemon
[value] => 4
)
[2] => Array
(
[param] => apple
[value] => 18
)
)
Upvotes: 1
Reputation: 365
$a = ['banana' => 'yellow', 'apple' => 3, 'lemon' => 18];
$b = ['banana' => 'brown', 'orange' => 3, 'lemon' => 4];
$a_keys = array_keys($a);
$c = $a;
foreach ($a_keys as $key) {
if(array_key_exists($key, $b)){
$c[$key] = $b[$key];
}
}
Upvotes: 0