Вот способ с parse_url, вместе с вариантами обработки ошибок.
$url_comps = parse_url($url, PHP_URL_HOST | PHP_URL_PATH);
if(!isset($url_comps['host']) || $url_comps['host'] !== 'music.yandex.ru')
{
echo 'Не Яндекс.Музыка!';
exit;
}
if(!isset($url_comps['path']) || strllen($url_comps['path']) == 0 || strpos($url_comps['path'], 'album') === false || strpos($url_comps['path'], 'track') === false)
{
echo 'Нет параметров альбома и трека!';
}
$url_path_params = explode('/', $url_comps['path']);
$url_path_params_count = count($url_path_params);
$album = null; $track = null;
for($i = 0; $i < $url_path_params_count; $i += 2)
{
if(isset($url_path_params[$i]) && isset($url_path_params[$i + 1]) && is_numeric($url_path_params[$i + 1]))
{
if($url_path_params[$i] === 'album')
$album = $url_path_params[$i + 1];
if($url_path_params[$i] === 'track')
$track = $url_path_params[$i + 1];
}
}
if(is_null($album))
{
echo 'Не задан числовой параметр альбома!';
exit;
}
if(is_null($track))
{
echo 'Не задан числовой параметр трека!';
exit;
}
$output = "https://music.yandex.ru/iframe/#track/".$album."/".$track."/";