簡體   English   中英

如果鍵值對在多維數組中匹配,如何將兩個數組與平均值合並

[英]How to merge two array with mean value if key-value pair matches in multidimensional 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'
    ],

);

在這里,您可以看到有 amenity_id 43304331的兩個便利設施重復出現。 而且,我想將這些數組與相同的舒適 id 合並並計算amenity_valuedom的平均值。

預期 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'
    ],

);

注意:可能有兩個以上的項目具有相同的 amenity_id,因此我們需要找到平均值(平均值)。

下面的代碼將獲取類似設施的所有鍵,並再次將其與主數組進行比較,以根據您的需要進行合並。 我相信這就是你要找的。

$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