powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP. Алгоритм группировки
2 сообщений из 2, страница 1 из 1
PHP. Алгоритм группировки
    #39397182
SQLPowerUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот алгоритм используется во всех отчетных системах, и превращает такую плоскую таблицу в структуру, чем-то напоминающее дерево



Дали мне задание сформировать Excel-файл с кучей сложных формул и группировками, как на картинке выше. В сети алгоритм группировки нигде не нашел, наверное плохо искал :)
Пришлось делать свой велосипед. Здесь список полей для группировки хранится в переменной $fields (это названия полей нашего Dataset, с учетом регистра)
Плюсы:
- хорошая скорость и мало кода
- универсальность (в $fields может быть сколько угодно полей из нашего Dataset, вложенность уровней будет правильной)
- переменную $fields можно формировать/брать где-то извне
Минусы:
- Dataset должен быть заранее отсортирован на сервере (для моей задачи это оказалось быстрее, чем копировать весь Dataset в массив php, а потом этот массив сортировать)
Код: 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.
function utf8($s) {return iconv('windows-1251','utf-8//IGNORE',$s);}
$params = [...];
$tsql = "SQL command";
$myQuery = sqlsrv_query($conn, $tsql, $params, ["Scrollable" => "buffered"]);

$fields = 'fio/mainProject/projectName/taskName';
$keys = explode('/', $fields);
$arr = [];
while ($row = sqlsrv_fetch_array ($myQuery,SQLSRV_FETCH_ASSOC)) {
    $ref = &$arr;
    foreach ($keys as $key) {
    $ref = &$ref[$row[$key]];
  }
}

echo '<style> *{font:11px verdana;} b{font-weight:700;}	td+td{text-align:center;}</style>', '<table><tr><td><b>Group element <td><b>Level <td><b>Count';
function getGroup($a, $level=0) {
  $level++;
  foreach ($a as $key => $value) {
  echo '<tr><td>'.str_repeat('&#160;',$level*4).utf8($key), '<td>', $level, '<td>', count($value);
  if (is_array($value)) {getGroup($value,$level);}
  }
}
getGroup($arr,-1);

echo '</table>';


Буду рад любым замечаниям и предложениям.
...
Рейтинг: 0 / 0
PHP. Алгоритм группировки
    #39397712
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLPowerUser В сети алгоритм группировки нигде не нашел, наверное плохо искал :)
xml?
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP. Алгоритм группировки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]