Разобрать тайм коды
00:00 - Вступление;
01:24 - Композитор God of War;
02:47 - Секретный турнир Кратоса;
04:14 - Поиск поэм Квасира;
04:51 - Кто такой Квасир в мифологии?;
05:50 - Отсылка на Horizon: Zero Dawn;
06:49 - Отсылка на The Last of Us;
07:38 - Отсылка на God of War;
1:08:41 - Отсылка на Death Stranding;
12:22:34 - Властелин Колец;
13:10:41 - Брат Кратоса.
Переменная содержит текст в котором могут быть таймкоды, пример выше.
Как разобрать текст, найти в нем таймкоды и получить на выходе массив
[[0,'Вступление'], [[84,'Композитор God of War']]
Где первое значение это время в секундах, второе значение - имя отрывка которое заканчивается переносом строки.
Возможно делать это и чтобы текст поправить, скажем время заменить, взять время в тег <span> и при этом массив формировать?
Ответы (1 шт):
Автор решения: UModeL
→ Ссылка
На PHP это будет выглядеть примерно так:
$sData = "00:00 - Вступление;
01:24 - Композитор God of War;
02:47 - Секретный турнир Кратоса;
04:14 - Поиск поэм Квасира;
04:51 - Кто такой Квасир в мифологии?;
05:50 - Отсылка на Horizon: Zero Dawn;
06:49 - Отсылка на The Last of Us;
07:38 - Отсылка на God of War;
1:08:41 - Отсылка на Death Stranding;
12:22:34 - Властелин Колец;
13:10:41 - Брат Кратоса.";
$aTimeline = [];
$aList = explode(";", $sData);
foreach ($aList as $sItem) {
$aTrip = explode(" - ", trim($sItem, ".\x00..\x20"));
$aTime = array_reverse(explode(":", $aTrip[0]));
$aTrip[0] = $aTime[0] + $aTime[1] * 60 + (isset($aTime[2]) ? $aTime[2] : 0) * 3600;
$aTimeline[] = $aTrip;
};
print_r($aTimeline);
Демонстрация аналогичного кода на JS:
let sData = `00:00 - Вступление;
01:24 - Композитор God of War;
02:47 - Секретный турнир Кратоса;
04:14 - Поиск поэм Квасира;
04:51 - Кто такой Квасир в мифологии?;
05:50 - Отсылка на Horizon: Zero Dawn;
06:49 - Отсылка на The Last of Us;
07:38 - Отсылка на God of War;
1:08:41 - Отсылка на Death Stranding;
12:22:34 - Властелин Колец;
13:10:41 - Брат Кратоса.`;
let aTimeline = [];
let aList = sData.split(';');
aList.forEach((sItem) => {
let aTrip = sItem.replace(/^\s+|[\s\.]+$/g, '').split(' - ');
let aTime = aTrip[0].split(':').reverse();
aTrip[0] = parseInt(aTime[0]) + parseInt(aTime[1]) * 60 + parseInt((aTime[2] | 0)) * 3600;
aTimeline.push(aTrip);
});
console.log(aTimeline);