Blog. Just Blog

Преобразование массива чисел в интервалы

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
По работе возникла необходимость обработать массив чисел таким образом, чтобы все последовательные значения в нем были преобразованы в интервалы. То есть массив [1, 3, 4, 5, 6, 9, 10, 15] должен превратиться в ["1", "3-6", "9-10", "15"]. Быстренько набросал вот такую функцию, может быть пригодится кому-нибудь еще.
  1. // Преобразование массива чисел в интервалы
  2. function array_to_intervals($data=array(), $divider='-') {
  3.     // Оставить только уникальные значения
  4.     $data=array_unique($data);
  5.     sort($data);
  6.  
  7.     $tmp=array();
  8.     $begin=$end=0;
  9.  
  10.     for ($i=0$i<count($data); $i++) {
  11.         // Начало интервала или одиночное значение
  12.         if ($begin==0) {
  13.             $begin=$end=$data[$i];
  14.         }
  15.  
  16.         if (isset($data[($i+1)])) {
  17.             // Расширить границы интервала
  18.             if ($data[($i+1)]==($end+1)) {
  19.                 $end++;
  20.             }
  21.             else {
  22.                 // Одиночное значение
  23.                 if ($begin==$end) {
  24.                     $tmp[]=$begin;
  25.                 }
  26.                 // Интервал
  27.                 else {
  28.                     $tmp[]=$begin.$divider.$end;
  29.                 }
  30.                 $begin=$end=0;
  31.             }
  32.         }
  33.     }
  34.  
  35.     if (count($data)) {
  36.         // Последнее значение
  37.         if ($begin==$end) {
  38.             $tmp[]=$begin;
  39.         }
  40.         else {
  41.             $tmp[]=$begin.$divider.$end;
  42.         }
  43.     }
  44.     return $tmp;
  45. }
Параметры функции: $data - массив для обработки, $divider - разделитель интервалов, по умолчанию "-", но можно задать свой, например, "...". На выходе - преобразованный массив с интервалами.

Поделиться ссылкой ВКонтакте
Просмотров: 1994 | Комментариев: 3

Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Nick (24.12.2023 в 19:01):
Благодарю, весьма годное решение!
Мистер N (16.02.2023 в 12:47):
спасибо, долго ломал голову с такой задачей, только структура массива была сложнее и группировка проходила по нескольким критериям
Иван (21.05.2021 в 11:57):
Пригодилось, большое спасибо

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.12 сек. / MySQL: 2 (0.0051 сек.) / Память: 4.5 Mb
Наверх