Коллеги прошу помощи в построении таблицы мне не нужно решении прошу подсказку в реализации, пока что не понимаю как правильно наполнять по оси х или y
есть данные
$arr = [
0=>[
"countGroup" => [
0 => [
"count_groups" => '5',
"count" => '3'
],
1 => [
"count_groups" => '6',
"count" => '5'
],
2 => [
"count_groups" => '7',
"count" => '21'
],
],
'city' => "CITY_1"
],
1=>[
"countGroup" => [
0 => [
"count_groups" => '6',
"count" => '4'
],
1 => [
"count_groups" => '7',
"count" => '5'
],
2 => [
"count_groups" => '10',
"count" => '21'
],
],
'city' => "CITY_2"
],
];
нужно получить таблицу вида
город \ наполняемость 10 7 6 5
CITY_1 - 21 5 3
CITY_2 21 5 4 -
верхняя строка это максимальный показатель (count) по городам а ниже это количество count_groups
то есть как в примере при максимальном 10 у нас есть в городе CITY_2 21 группа при показателе 7 у нас есть CITY_1 - 21 группа и в CITY_2 - 5 и т.д
не могу понять как правильно разбить и сгруппировать массивы и возможно ли это сделать в один перебор
Прежде чем что-либо выводить необходимо данные привести в удобный для этого формат. В данном случае, чтобы успешно выводить таблицу вам нужно перечислить строки и знать столбцы. И если строки вам известны, то надо собрать полный набор столбцов.
Для удобства лучше представить исходный массив несколько в ином виде заменив
0 => [
"count_groups" => '5',
"count" => '3'
],
на
5 => 3
Ведь первое значение это у вас идентификатор группы, а второе - значение? вот и сделайте их ключом массива и его значением. Если это можно сделать на уровне выборки данных, то хорошо, если нет, то, например, так:
$arr = array_map(function(&$c){
$c['countGroup'] = array_column($c['countGroup'], 'count', 'count_groups');
return $c;
},$arr);
Далее надо взять все доступные уникальные ключи групп слить в один массив и, видимо, отсортировать:
$cols = array_reduce(array_map(function($c){
return array_keys($c['countGroup']);
}, $arr),
'array_merge', []);
$cols = array_unique($cols);
Теперь вы можете писать цикл по строкам $arr, и вложенный цикл по столбцам $cols:
foreach($arr as $row){
// $row['city']
foreach($cols as $cIdx){
// $row['countGroup'][$cIdx] ;
}
}
Продвижение своими сайтами как стратегия роста и независимости