Единственное, что я бы посоветовал, - это улучшить ваш шаблон регулярных выражений.
/width="(\d)*"/
Должно быть:
/width="(\d*)"/
Это даст вам группу для всего значения, которое вы ищете, а не группу для символа в шаблоне. Таким образом, вы можете изменить:
$width = substr($width[0],7,-1);
в
$width = $width[1];
Вы также можете легко применить это к высоте. Конечные замены можно превратить в один вызов, превратив первые два параметра в массивы.
В заключение я предлагаю следующее:
function scale_video($video_embed,$new_width = 200){
// only process if both matches have results
if(preg_match('/width="(\d+)"/', $video_embed, $width) &&
preg_match('/height="(\d+)"/', $video_embed, $height) {
$width = $width[1];
$height = $height[1];
$scale_factor = $new_width/$width;
$new_height = floor($height * $scale_factor);
$video_embed = preg_replace(array('/width="(\d+)"/', '/height="(\d+)"/'), array('width="'.$new_width.'"', 'height="'.$new_height.'"'), $video_embed);
}
return $video_embed;
}