Распарсить время

Статус
В этой теме нельзя размещать новые ответы.

Genk0

Хранитель порядка
Регистрация
2 Июн 2010
Сообщения
3.095
Реакции
1.405
Есть строки вида:
Сб 31 января, 19:00
Вс 25 января, 11:00, 14:00
Пт 30 января, 17:00, Сб 31 января, 11:00, 14:00
Пт 30 января, 17:00, Сб 31 января, 11:00, 14:00, Вс 25 января, 11:00, 14:00
т.е. от 1 до 3-5 дат, с 1 и более указанием времени.
Нужно получить массив каждого дня с его временем
1. ['30 января']=>['17:00'];
2. ['30 января']=>['17:00'], ['31 января']=>['11:00, '14:00''], ...
3. ['25 января']=>['11:00, 14:00'], ['30 января']=>['17:00'], ['31 января']=>['11:00, '14:00''], ...
 
Тут простой регуляркой не справиться.
1. Разбить по запятым.
2. Разбить по строкам.
3. Объединить массивы 1 и 2.
4. Цикл по массиву — если нет даты, то надо брать предыдущую
5. Собрать всё.

Возможно и регуляркой можно, но тут не простая регулярка, Для просмотра ссылки Войди или Зарегистрируйся:
9. Проверки
(?<=) — позитивная ретроспективная проверка
(?<!) — негативная ретроспективная проверка
(?=) — позитивная опережающая проверка
(?!) — негативная опережающая проверка
В проверках, к сожалению, вообще не силён.
 
Последнее редактирование:
Для просмотра ссылки Войди или Зарегистрируйся
PHP:
$str = '
Сб 31 января, 19:00
Вс 25 января, 11:00, 14:00
Пт 30 января, 17:00, Сб 31 января, 11:00, 14:00
Пт 30 января, 17:00, Сб 31 января, 11:00, 14:00, Вс 25 января, 11:00, 14:00
';

preg_match_all('~\S{2} (\d{2} \S+), (\d{2}:\d{2}(?:, \d{2}:\d{2})*)~u', $str, $match, PREG_SET_ORDER);


print_r($match);

$result = array();
foreach($match as $m)
{
  $result[$m[1]] = explode(', ', $m[2]);
}

print_r($result);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху