
Преобразование массива чисел в интервалы
По работе возникла необходимость обработать массив чисел таким образом, чтобы все последовательные значения в нем были преобразованы в интервалы. То есть массив [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;
- }
Просмотров: 2292 | Комментариев: 5
Метки: PHP, полезные функции

Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(30.11.2024 в 13:23):
Без доработки - нет

Jerkyboy
(30.11.2024 в 03:04):
А подойдёт ли этот скрипт в случае, если числа вида А1,А3,А4,А5,В23,В24,В25,В26 и тд..?

Nick
(24.12.2023 в 19:01):
Благодарю, весьма годное решение!

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

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

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