Как можно вычислить среднее арифметическое для каждого значения ключа [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
)
)
```
Для вычисления среднего арифметического для каждого значения ключа [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].
<pre><code class="php"><?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)
?></code></pre> <br/> <br/> поле "id" я убрал т.к. оно теряет смысл после вычисления среднего