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

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

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

Author24 — интернет-сервис помощи студентам
Формучане, приветствую всех. Есть такой массив
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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2021, 16:26
Ответы с готовыми решениями:

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

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

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

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

2
2433 / 2285 / 594
Регистрация: 27.05.2011
Сообщений: 7,808
03.03.2021, 17:46 2
Лучший ответ Сообщение было отмечено 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  [ТС] 3
Огонь, спасибо огромное
0
03.03.2021, 21:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.03.2021, 21:14
Помогаю со студенческими работами здесь

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru