Объединить несколько массивов с заказом - PullRequest
0 голосов
/ 15 мая 2019

Например, у меня есть четыре ссылки в следующей переменной:

$content = "

http://example.com/folder/Name.S01E01.720p.mp4
http://example.com/folder/Name.S01E02.720p.mp4

http://example.com/folder/Name.S02E01.480p.mp4
http://example.com/folder/Name.S02E02.480p.mp4

";

В переменной up я хочу создать заказ в нескольких словах:

Season template is <b>S00</b>
And
Episode template is <b>E00</b>
And
Quality template is <b>720p and 480p</b>

ИтакМне нужно объединить эти значения, чтобы получить результат,

Мне нужна какая-то функция, чтобы сделать $ content примерно таким:

Array
(
    [01] => //Season Number
    (
        [720p] =>//Quality Name
            (
                [URLs] => //Full Url's
                    (
                        [0] => http://example.com/folder/Name.S01E01.720p.mp4
                        [1] => http://example.com/folder/Name.S01E02.720p.mp4
                    )

            )

    )

[02] => //Season Number
    (
        [480p] => //Quality Name
            (
                [URLs] => //Full Url's
                    (
                        [0] => http://example.com/folder/Name.S02E01.480p.mp4
                        [1] => http://example.com/folder/Name.S02E02.480p.mp4
                    )

            )

    )

)

Я надеюсь, вы понимаете, о чем я.

посмотрите, пожалуйста:

$content = "

http://example.com/folder/Name.S01E01.720p.mp4
http://example.com/folder/Name.S01E02.720p.mp4

http://example.com/folder/Name.S02E01.480p.mp4
http://example.com/folder/Name.S02E02.480p.mp4

";


if(preg_match_all('/(https?:\/\/[^ ]+?(?:\.mkv|\.mp4))/ms', $content, $matches)){
    foreach($matches[0] as $link){
        if(preg_match('/(\d++(p))/i',$link,$q)){
            $quality[] = $q[0];
        }
        $full_url[] = trim(urldecode($link));
    }
}

if(preg_match_all('/(S(\d++)E(\d++))/i', $content, $parts)){
    foreach($parts[0] as $part){
         $season[]  = $part[2];
    }
}

//var_dump($quality);
//var_dump($full_url);
//var_dump($season);

Я хочу совместить сезон $ с $ full_url и качеством $.

1 Ответ

1 голос
/ 15 мая 2019

Я добавил часть имени в качестве первого уровня и номер эпизода вместо динамического индекса для каждого 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...