Есть такой массив:
array ( '18-24' => array ( 0 => 'female/5', 1 => 'male/10', 2 => 'female/20', ), '25-34' => array ( 0 => 'female/50', 1 => 'male/30', 2 => 'female/10', )
Как на выходе получить массив вида:
array ( '18-24' => array ( "female" => '25', "male" => '10'), '25-34' => array ( "female" => '60', "male" => '30' )
То есть чтобы суммировались значения мужчин и женщин.
Вот так вывожу свой текущий массив:
$demograph = array();
foreach ($arrDemo as $valueDemo) {
$demograph[$valueDemo['vozrast']][] = $valueDemo['pol'].'/'.$valueDemo['col'];
}
Буду благодарен за помощь.
Поправил код, теперь выдает без нотисов, и думаю такой вариант самый простой:
$arr = [
'18-24' => ['female/5', 'male/10', 'female/20'],
'25-34' => ['female/50', 'male/30', 'female/10']
];
$new = [];
foreach ($arr as $key => $value)
{
$new[$key] = [];
foreach ($value as $k => $v)
{
$dc = explode('/', $v);
if (!isset($new[$key][$dc[0]]))
$new[$key][$dc[0]] = 0;
$new[$key][$dc[0]] += $dc[1];
}
}
print_r($new);
На выходе получаем:
Array
(
[18-24] => Array
(
[female] => 25
[male] => 10
)
[25-34] => Array
(
[female] => 60
[male] => 30
)
)
Поскольку представленный вами массив вы таки генерируете и он не особо удобен для обработки, то вернемся к исходным данным (я несколько переименовал ключи):
$valueDemo = [
[ 'age'=> '18-24', 'sex' => 'female', 'qnt' => 5],
[ 'age'=> '18-24', 'sex' => 'male', 'qnt' => 10],
[ 'age'=> '18-24', 'sex' => 'female', 'qnt' => 20],
[ 'age'=> '25-34', 'sex' => 'female', 'qnt' => 50],
[ 'age'=> '25-34', 'sex' => 'male', 'qnt' => 30],
[ 'age'=> '25-34', 'sex' => 'female', 'qnt' => 10],
] ;
далее, следует получить уникальные значения age
и использовать их как ключи результирующего массива:
$data = array_fill_keys(array_unique(array_column($valueDemo, 'age')), ['male' => 0, 'female' => 0]);
Начальными значениями будет пары ['male' => 0, 'female' => 0]
И осталось пройти по исходному массиву и просуммировать данные:
array_walk($valueDemo, function($v) use (&$data){
$data[ $v['age'] ][ $v['sex'] ] += $v['qnt'];
});
Примерно так я бы решал проблему:
$demograph = [];
foreach ($arrDemo as $valueDemo) {
$demograph[$valueDemo['vozrast']][$valueDemo['pol']] += $valueDemo['col'];
}
В итоге для каждой возрастной категории для каждого пола Вы будете суммировать количество людей того или иного пола.
На выходе будет что-то типа:
[
'18-24' => ['male' => 10, 'female' => 25],
'25-34' => ...
]
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Работаю на linux, делаю приложение на yii2-advanced, локальный сервер apache2
В настройках прав доступа Битрикс, раздел CRM, есть Пользователь ТЕСТ с ролью Начальник Отдела