[英]How to merge two array with mean value if key-value pair matches in multidimensional array
I have an array.我有一个数组。
$arr = array(
[
'amenity_id' => '4277',
'amenity_name' => 'Floor 1',
'category_id' => '380',
'amenity_value' => '0',
'unit_id' => '25253',
'unit_number' => '701',
'dom' => '50',
'building_id' => '423'
],
[
'amenity_id' => '4330',
'amenity_name' => 'Floor 7',
'category_id' => '380',
'amenity_value' => '53',
'unit_id' => '25253',
'unit_number' => '701',
'dom' => '50',
'building_id' => '423'
],
[
'amenity_id' => '4330',
'amenity_name' => 'Floor 7',
'category_id' => '380',
'amenity_value' => '53',
'unit_id' => '25253',
'unit_number' => '701',
'dom' => '20',
'building_id' => '423'
],
[
'amenity_id' => '4331',
'amenity_name' => 'Top Floor',
'category_id' => '380',
'amenity_value' => '32',
'unit_id' => '25253',
'unit_number' => '701,',
'dom' => '50',
'building_id' => '423'
],
[
'amenity_id' => '4331',
'amenity_name' => 'Top Floor',
'category_id' => '380',
'amenity_value' => '0',
'unit_id' => '25253',
'unit_number' => '701',
'dom' => '20',
'building_id' => '423'
],
);
Here, you can see that two amenities with amenity_id 4330
and 4331
are repeated.在这里,您可以看到有 amenity_id 4330
和4331
的两个便利设施重复出现。 And, I want to merge those array with the same amenity id and calculate the mean value for amenity_value
and dom
.而且,我想将这些数组与相同的舒适 id 合并并计算amenity_value
和dom
的平均值。
Expected output:预期 output:
array(
[
'amenity_id' => '4277',
'amenity_name' => 'Floor 1',
'category_id' => '380',
'amenity_value' => '0',
'unit_id' => '25253',
'unit_number' => '701',
'dom' => '50',
'building_id' => '423'
],
[
'amenity_id' => '4330',
'amenity_name' => 'Floor 7',
'category_id' => '380',
'amenity_value' => '53',//(53+53)/2
'unit_id' => '25253',
'unit_number' => '701',
'dom' => '35',//(50+20)/2
'building_id' => '423'
],
[
'amenity_id' => '4331',
'amenity_name' => 'Top Floor',
'category_id' => '380',
'amenity_value' => '16', //(32+0)/2
'unit_id' => '25253',
'unit_number' => '701,'
'dom' => '35',//(50+20)/2
'building_id' => '423'
],
);
Note: There could be more than two items with the same amenity_id so we need to find average(mean).注意:可能有两个以上的项目具有相同的 amenity_id,因此我们需要找到平均值(平均值)。
Below code will get all the keys of similar amenities and compare it again with main array to merge according to your need.下面的代码将获取类似设施的所有键,并再次将其与主数组进行比较,以根据您的需要进行合并。 I believe this is what you're looking for.我相信这就是你要找的。
$newValArr = $newArr = $newAmenity = [];
foreach ($arr as $key => $value) {
if (!array_key_exists($value['amenity_id'], $newValArr)) {
$newValArr[$value['amenity_id']] = [];
}
array_push( $newValArr[$value['amenity_id']], $key );
}
foreach ($newValArr as $amenityId => $arrKeys) {
$newAmenity = $arr[$arrKeys[0]];
if( count($arrKeys) > 1 && $newAmenity['amenity_id'] == $amenityId){
$newAmenity['amenity_value'] = 0;
$newAmenity['dom'] = 0;
foreach ($arrKeys as $arrKey) {
$newAmenity['amenity_value'] += ($arr[$arrKey]['amenity_value'] / count($arrKeys));
$newAmenity['dom'] += ($arr[$arrKey]['dom'] / count($arrKeys));
}
}
array_push( $newArr, $newAmenity);
}
print_r( $newArr );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.