Я добавил часть имени в качестве первого уровня и номер эпизода вместо динамического индекса для каждого URL, если вы не хотите их использовать, просто используйте $result[$m[2]][$m[4]]['URLs'][] = $url;
. Я также пропустил часть .mp4
на случай, если у вас есть другие расширения:
$lines = array_filter(explode("\n", $content));
foreach($lines as $url) {
preg_match('/^([^.]+)\.S(\d\d)E(\d\d)\.(\d+p)/', pathinfo($url, PATHINFO_BASENAME), $m);
$result[$m[1]][$m[2]][$m[4]]['URLs'][$m[3]] = $url;
}
- Разделить содержимое на концах строк и отфильтровать пустые строки
- Зацикливание строк и совпадение нужных фрагментов с базовым именем файла
- Построить многомерный массив, используя эти совпадения
Учитывая ваш $content
, это даст следующее:
Array
(
[Name] => Array
(
[01] => Array
(
[720p] => Array
(
[URLs] => Array
(
[01] => http://example.com/folder/Name.S01E01.720p.mp4
[02] => http://example.com/folder/Name.S01E02.720p.mp4
)
)
)
[02] => Array
(
[480p] => Array
(
[URLs] => Array
(
[01] => http://example.com/folder/Name.S02E01.480p.mp4
[02] => http://example.com/folder/Name.S02E02.480p.mp4
)
)
)
)
)
- Совпадение с начала
^
и захват одного или нескольких +
без точек [^.]
символов
- Затем сопоставьте точку
\.
с буквой S
и запишите две цифры \d\d
- Затем сопоставьте букву
E
и введите две цифры \d\d
- Затем сопоставьте точку
\.
и запишите одну или несколько цифр \d+
и символ p