Как посчитать среднее арифметическое значений в массиве PHP?

Как можно вычислить среднее арифметическое для каждого значения ключа [id_public] в данном массиве? 

Приведу пример массива:
```
Array
(
    [0] => Array
        (
            [id] => 1
            [number] => 5
            [id_public] => 1
        )

    [1] => Array
        (
            [id] => 2
            [number] => 3
            [id_public] => 1
        )

    [2] => Array
        (
            [id] => 3
            [number] => 2
            [id_public] => 2
        )

    [3] => Array
        (
            [id] => 4
            [number] => 1
            [id_public] => 2
        )
    [4] => Array
        (
            [id] => 5
            [number] => 1
            [id_public] => 4
        )
)
```
Желаемый результат:
```
Array 
( 
 [0] => Array 
 ( 
 [id] => 1
 [number] => 4
 [id_public] => 1 
 ) 
 [1] => Array 
 ( 
 [id] => 2 
 [number] => 2 
 [id_public] => 2 
 ) 
 [2] => Array 
 ( 
 [id] => 3 
 [number] => 1.5 
 [id_public] => 4 
 ) 
)
```
  • 23 марта 2024 г. 8:09
Ответы на вопрос 2
Для вычисления среднего арифметического для каждого значения ключа [id_public] в данном массиве PHP, можно воспользоваться следующим кодом:

```php
$data = [
    ["id" => 1, "number" => 5, "id_public" => 1],
    ["id" => 2, "number" => 3, "id_public" => 1],
    ["id" => 3, "number" => 2, "id_public" => 2],
    ["id" => 4, "number" => 1, "id_public" => 2],
    ["id" => 5, "number" => 1, "id_public" => 4]
];

$grouped = [];
foreach ($data as $item) {
    if (!isset($grouped[$item['id_public']])) {
        $grouped[$item['id_public']] = ['sum' => 0, 'count' => 0];
    }
    $grouped[$item['id_public']]['sum'] += $item['number'];
    $grouped[$item['id_public']]['count']++;
}

foreach ($grouped as $idPublic => $values) {
    $average = $values['sum'] / $values['count'];
    $grouped[$idPublic]['average'] = $average;
    unset($grouped[$idPublic]['sum']);
    unset($grouped[$idPublic]['count']);
}

$result = [];
foreach ($data as $item) {
    $idPublic = $item['id_public'];
    $newItem = ['id' => $item['id'], 'number' => $grouped[$idPublic]['average'], 'id_public' => $idPublic];
    if (!in_array($newItem, $result)) {
        $result[] = $newItem;
    }
}

print_r($result);
```

Данный код сначала группирует элементы массива по значению ключа [id_public], затем вычисляет сумму и количество элементов каждой группы, и наконец, вычисляет среднее арифметическое для каждой группы. Результирующий массив содержит элементы с обновленным значением ключа [number].
<?php
$arr = [
	        array(
		'id'=>1,
		'number'=>5,
		'id_public'=>1
		),
		array(
		'id'=>2,
		'number'=>3,
		'id_public'=>1
		),
		array(
		'id'=>3,
		'number'=>2,
		'id_public'=>2
		),
		array(
		'id'=>4,
		'number'=>2,
		'id_public'=>4
		),
		array(
		'id'=>5,
		'number'=>1,
		'id_public'=>4
		)
	];
	
	$srch = 'number';
	$unic = 'id_public';
	
	$new_arr = [];


foreach ($arr as $value) {
    if(!isset($new_arr[$value[$unic]]))$new_arr[$value[$unic]] = [0, 0];
    $new_arr[$value[$unic]][0] += $value[$srch];//общее число
    $new_arr[$value[$unic]][1]++;//количество повторов
}

$arr = [];

foreach($new_arr as $key => $value){
	array_push($arr, array($unic=>$key, $srch=>$value[0]/$value[1]));
}

print_r($arr)




        
        ?>


поле "id" я убрал т.к. оно теряет смысл после вычисления среднего
Похожие вопросы