Объединить несколько массивов с заказом

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

$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 S00
And
Episode template is E00
And
Quality template is 720p and 480p

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

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

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 ответ


Я добавил часть имени в качестве первого уровня и номер эпизода вместо динамического индекса для каждого URL. Если вы не хотите их использовать, просто используйте $result[$m[2]][$m[4]]['URLs'][] = $url; , Я также пропустил часть .mp4 на случай, если у вас есть другие расширения:

$lines = array_filter(explode("
", $content));
foreach($lines as $url) {
    preg_match('/^([^.]+).S(dd)E(dd).(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 и взять две цифры dd
  • Затем сопоставьте букву E и запишите две цифры dd
  • Тогда сопоставьте точку . и захватить одну или несколько цифр d+ и символ p

Есть идеи?

10000