您可以使用
array_column
使
userId
作为关键和
worth
作为值。
使用
map
重复第一个数组。检查钥匙是否存在,如果存在,则更换
value
。
$arr1 = [{"id":1,"value":40},{"id":2,"value":30}];
$arr2 = [{"userId":1,"worth":20},{"userId":2,"worth":10}];
//Use array_column to make the userId as the key and worth as the value.
$arr2 = array_column($arr2, 'worth', 'userId');
//Use `map` to reiterate the first array. Check if the key exist on $arr2, if exist replace the `value`. If not replace it with empty string.
$results = array_map( function($v) use ( $arr2 ) {
$valueInArr2 = array_search($v->id, array_column($arr2, 'userId'));
$v->value = $valueInArr2 ? $valueInArr2 : "";
return $v;
}, $arr1);
echo "<pre>";
print_r( $results);
echo "</pre>";
这将导致:
Array
(
[0] => Array
(
[id] => 1
[value] => 20
)
[1] => Array
(
[id] => 2
[value] => 10
)
)
更新时间:
使用对象。我还没有测试过这个。
$arr1 = .....;
$arr2 = .....;
//Make the object into array
$arr2 = array_reduce($arr2, function($c,$v) {
$c[ $v->userId ] = array(
'worth' => $v->worth;
'userId' => $v->userId;
);
return $c;
},array());
//Update the first array
$results = array_map( function( $v ) use ( $arr2 ) {
$val = array( 'id' => $v->id );
$val['value'] = isset( $arr2[ $v->id ] ) ? $arr2[ $v->id ] : "";
return $v;
}, $arr1);