
Преобразование массива чисел в интервалы
По работе возникла необходимость обработать массив чисел таким образом, чтобы все последовательные значения в нем были преобразованы в интервалы. То есть массив [1, 3, 4, 5, 6, 9, 10, 15] должен превратиться в ["1", "3-6", "9-10", "15"]. Быстренько набросал вот такую функцию, может быть пригодится кому-нибудь еще.Code (PHP) : Убрать нумерацию
- // Преобразование массива чисел в интервалы
- function array_to_intervals($data=array(), $divider='-') {
- // Оставить только уникальные значения
- $data=array_unique($data);
- sort($data);
- $tmp=array();
- $begin=$end=0;
- for ($i=0; $i<count($data); $i++) {
- // Начало интервала или одиночное значение
- if ($begin==0) {
- $begin=$end=$data[$i];
- }
- if (isset($data[($i+1)])) {
- // Расширить границы интервала
- if ($data[($i+1)]==($end+1)) {
- $end++;
- }
- else {
- // Одиночное значение
- if ($begin==$end) {
- $tmp[]=$begin;
- }
- // Интервал
- else {
- $tmp[]=$begin.$divider.$end;
- }
- $begin=$end=0;
- }
- }
- }
- if (count($data)) {
- // Последнее значение
- if ($begin==$end) {
- $tmp[]=$begin;
- }
- else {
- $tmp[]=$begin.$divider.$end;
- }
- }
- return $tmp;
- }
Просмотров: 1890 | Комментариев: 2
Метки: PHP, полезные функции

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
Мистер N
(16.02.2023 в 12:47):
спасибо, долго ломал голову с такой задачей, только структура массива была сложнее и группировка проходила по нескольким критериям

Иван
(21.05.2021 в 11:57):
Пригодилось, большое спасибо

Добавить комментарий
Заполните форму для добавления комментария
