简体   繁体   English

如果键值对在多维数组中匹配,如何将两个数组与平均值合并

[英]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 43304331的两个便利设施重复出现。 And, I want to merge those array with the same amenity id and calculate the mean value for amenity_value and dom .而且,我想将这些数组与相同的舒适 id 合并并计算amenity_valuedom的平均值。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM