双层foreach循环,取出key相等的元素,组成新数组返回,如何优化成一层循环?
程序员文章站
2024-04-03 10:00:46
...
if($arr1 && $arr2) {
foreach($arr1 as $key1 => $val1) {
foreach($arr2 as $key2 => $val2) {
if($val1['orderId'] == $val2['orderId']) {
$arr1[$key1]['transId'] = $val2['transId'];
}
}
}
}
回复内容:
if($arr1 && $arr2) {
foreach($arr1 as $key1 => $val1) {
foreach($arr2 as $key2 => $val2) {
if($val1['orderId'] == $val2['orderId']) {
$arr1[$key1]['transId'] = $val2['transId'];
}
}
}
}
if($arr1 && $arr2) {
$ids = array_column($arr2,'orderId');
foreach($arr1 as $key1 => $val1) {
if(in_array($val1['orderId'] , $ids)) {
$arr1[$key1]['transId'] = $val1['orderId'];
}
}
}
$arr1 = array(
array(
'orderId' => 1,
),
array(
'orderId' => 2,
),
array(
'orderId' => 3,
),
array(
'orderId' => 4,
),
array(
'orderId' => 5,
),
array(
'orderId' => 6,
),
);
$arr2 = array(
array(
'orderId' => 2,
'transId' => 100001,
),
array(
'orderId' => 4,
'transId' => 100002,
),
array(
'orderId' => 5,
'transId' => 100003,
),
);
if( $arr1 && $arr2) {
// `orderId` used for index
$index_key = 'orderId';
$column_key = 'transId';
$columns = array_column($arr2, $column_key, $index_key);
foreach($arr1 as &$val){
$_key = $val[$index_key];
if( array_key_exists($_key, $columns) ) {
$val[$column_key] = $columns[$_key];
}
}
print_r($arr1);
}