Ваше регулярное выражение сохраняет результат в $out
следующим образом:
(
[0] => Array
(
[0] => http://www.youtube.com/watch?v=5qm8PH4xAss
[1] => watch
)
[1] => Array
(
[0] => http://www.youtube.com/?v=Dd3df4e
)
)
В вашем регулярном выражении есть подгруппа для сопоставления текста watch
, и поэтому это заканчивается как результат в массиве.
Поскольку вы просматриваете все результаты $out[$i]
, вы пытаетесь запустить parse_url
для второго результата первого совпадения;это приводит к пустому выводу.
Чтобы исправить вашу проблему, просто измените свою итерацию на что-то вроде:
if($links){
foreach($out as $result){
$youtube = parse_url($result[0]);
echo "<b><u> URL </b><br/></u> QUERY: " . $youtube["query"] . "<br/>";
}
}