Как можно вычислить среднее арифметическое для каждого значения ключа [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].
<?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" я убрал т.к. оно теряет смысл после вычисления среднего