Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 03.03.2021
Сообщений: 7

PHP найти сумму значений в массиве по наличию двух значений

03.03.2021, 16:26. Показов 1687. Ответов 2

Студворк — интернет-сервис помощи студентам
Формучане, приветствую всех. Есть такой массив
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
$amm = [[
    'id_sand' => 1,
    'address' => '',
    'parent_company' => '107',
    'parent_recipies' => '0',
    'parent_materials' => 'щебень',
    'amount_sand' => 10,
    'date_execution' => 'March',
], [
    'id_sand' => 2,
    'address' => '',
    'parent_company' => '107',
    'parent_recipies' => '0',
    'parent_materials' => 'песок',
    'amount_sand' => 20,
    'date_execution' => 'February',
], [
    'id_sand' => 3,
    'address' => '',
    'parent_company' => '107',
    'parent_recipies' => '0',
    'parent_materials' => 'песок',
    'amount_sand' => 30,
    'date_execution' => 'February',
], [
    'id_sand' => 4,
    'address' => '',
    'parent_company' => '107',
    'parent_recipies' => '0',
    'parent_materials' => 'щебень',
    'amount_sand' => 15,
    'date_execution' => 'February',
],
    [
        'id_sand' => 5,
        'address' => '',
        'parent_company' => '107',
        'parent_recipies' => '0',
        'parent_materials' => 'щебень',
        'amount_sand' => 45,
        'date_execution' => 'February',
    ],
 
];
Нужно получить сумму 'amount_sand', но чтобы они были помесячно, т.е. по ключу 'date_execution' в котом месяц сложить 'amount_sand' и раздельно по 'parent_materials', т.е. 'щебень' и 'песок' раздельно. По итогу из этого массива нужно получить три February-щебень-60, February- песок-50, March-щебень-10.
Пока получилось только по одному условию сложить и заклинило
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function array_group(array $array)
{
    $result = [];
    $arrmonth = [];
    foreach ($array as $value) {
  $column = $value['parent_materials'];
        if(!isset($result[$column])){
            $result[$column] = $value;
        }else{
            $result[$column]['amount_sand'] += $value['amount_sand'];
        }
   }
 
    return $result;
}
print_r(array_group($amm));
Плиз нужна помощь, заранее благодарен кто откликнется.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2021, 16:26
Ответы с готовыми решениями:

Найти сумму 2 наибольших значений в массиве
Ищу сумму 2 наибольших значений в массиве введенном с клавы(z). Надо чтобы а и б не были взяты с одного z, но при этом они могут быть...

Найти максимальную сумму значений элементов строки в массиве
#define _CRT_SECURE_NO_WARNINGS #define _CRT_NONSTDC_NO_WARNINGS #include <stdio.h> #include <conio.h> #include <stdlib.h> ...

Найти сумму значений элементов, которые меньше полусуммы наименьшего и наибольшего значений
Помогите пожалуйста с задачей Дан целочисленный массив A(N), заданный датчиком случайных чисел в интервале (-105,109). Найти сумму...

2
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
03.03.2021, 17:46
Лучший ответ Сообщение было отмечено PartizanPHP как решение

Решение

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
 
$amm = [
    [
        'id_sand' => 1,
        'address' => '',
        'parent_company' => '107',
        'parent_recipies' => '0',
        'parent_materials' => 'щебень',
        'amount_sand' => 10,
        'date_execution' => 'March',
    ],
    [
        'id_sand' => 2,
        'address' => '',
        'parent_company' => '107',
        'parent_recipies' => '0',
        'parent_materials' => 'песок',
        'amount_sand' => 20,
        'date_execution' => 'February',
    ],
    [
        'id_sand' => 3,
        'address' => '',
        'parent_company' => '107',
        'parent_recipies' => '0',
        'parent_materials' => 'песок',
        'amount_sand' => 30,
        'date_execution' => 'February',
    ],
    [
        'id_sand' => 4,
        'address' => '',
        'parent_company' => '107',
        'parent_recipies' => '0',
        'parent_materials' => 'щебень',
        'amount_sand' => 15,
        'date_execution' => 'February',
    ],
    [
        'id_sand' => 5,
        'address' => '',
        'parent_company' => '107',
        'parent_recipies' => '0',
        'parent_materials' => 'щебень',
        'amount_sand' => 45,
        'date_execution' => 'February',
    ],
 
];
 
class TwoKeysArrayParser
{
    private string $mainKey;
    private string $secondaryKey;
    private string $valueKey;
 
    private array $result = [];
 
    public function __construct(string $mainKey, string $secondaryKey, string $valueKey)
    {
        $this->mainKey = $mainKey;
        $this->secondaryKey = $secondaryKey;
        $this->valueKey = $valueKey;
    }
 
    public function getResult(): array
    {
        return $this->result;
    }
 
    public function parseItem(array $item): bool
    {
        if ($this->validate($item) === false) {
            return false;
        }
 
        $this->addToCounter(
            $item[$this->mainKey],
            $item[$this->secondaryKey],
            $item[$this->valueKey]
        );
 
        return true;
    }
 
    private function validate(array $item): bool
    {
        return isset(
            $item[$this->mainKey],
            $item[$this->secondaryKey],
            $item[$this->valueKey]
        );
    }
 
    private function addToCounter(string $key, string $key2, int $value): void
    {
        if (!isset($this->result[$key][$key2])) {
            $this->result[$key][$key2] = 0;
        }
        $this->result[$key][$key2] += $value;
    }
}
 
$parser = new TwoKeysArrayParser('date_execution', 'parent_materials', 'amount_sand');
array_map([$parser, 'parseItem'], $amm);
 
print_r($parser->getResult());
1
0 / 0 / 0
Регистрация: 03.03.2021
Сообщений: 7
03.03.2021, 21:14  [ТС]
Огонь, спасибо огромное
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2021, 21:14
Помогаю со студенческими работами здесь

Найти сумму наибольших значений строк и произведение наименьших значений столбцов матрицы
Дана действительная матрица размера MxN. Найти сумму наибольших значений элементов ее строк, а также произведение наименьших элементов ее...

Найти сумму двух наибольших значений (среди введенных трех)
Помогите пожалуйста

Найти разность средних арифметических значений и сумму двух массивов
Даны 2 массива. Найти разность их средних арифметических значений и сумму с помощью команды функции и процедуры.

Найти в одномерном массиве количество отрицательных значений и сумму положительных
Доброго времени суток! помогите пожалуйста сделать задачку с массивом. Поочередно вводятся пять чисел a,b,c,d,e,f. Где a,b,c,d,e,f -...

В массиве найти сумму абсолютных значений и максимальный элемент по модулю
В массиве X(N) найти сумму абсолютных значений и максимальный элемент по модулю.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru