Я создаю приложение, которое позволяет пользователям писать на изображении с использованием изображения GD. Ящик изображения имеет определенную ширину. Я сталкиваюсь с проблемой, когда пользователи пишут слова, длина которых больше ширины моего изображения. Я хотел использовать рекурсию, чтобы разделить слово, полагаю, что я не профессионал в этом. Вот что у меня есть.Рекурсия для разбиения слова по определенной ширине линии (gd-образ)
function cutLongWord($word, $fullwidth, $font, $fontsize){
$arrWords = array();
splitWord($arrWords, $word, $fullwidth, 0, $font, $fontsize);
}
function splitWord(&$arrWords, $word, $fullwidth, $startIndex, $font, $fontsize){
$output = "";
$numStringLength = strlen($word);
for($i = 1; ($i + $startIndex) <= $numStringLength; $i++){
$substring = substr($word, $startIndex, $i);
//dimension of substring
$dimensions = imagettfbbox($fontsize, 0, $font, $substring);
//line width of substring
$subLineWidth = $dimensions[4] - $dimensions[0];
if($subLineWidth <= $fullwidth){
$output = $substring;
}
else {
$arrWords[] = splitWord($arrWords, $word, $fullwidth, ($i - 1), $font, $fontsize);
}
}
return $output;
}
Этот объект проходит в бесконечном цикле. Я как бы застрял. Если бы вы могли указать мне в правильном направлении, я был бы очень благодарен.
Спасибо.
посмотреть на [WordWrap] (http://php.net/manual/en/function.wordwrap.php) или [chunk_split] (HTTP://www.php.net/manual/en/function.chunk-split.php). это было бы намного проще. – bitWorking
также смотрите на комментарии [здесь] (http://de3.php.net/manual/en/function.imagettfbbox.php). они полны таких функций. – bitWorking
Я думаю, что ваш бесконечный цикл здесь: $ arrWords [] = splitWord (& $ arrWords, $ word, $ fullwidth, ($ i - 1), $ font, $ fontsize); Если слово не поместится в строке, то вы снова разделите все слово, но снова слово не подходит и так далее. – tingel2k