我正在创建一个应用程序,允许用户使用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;
}
这是一个无限循环。我有点卡住了。如果你能指出我正确的方向,我将非常感激。
感谢。
答案 0 :(得分:0)
你可能不需要为此使用递归,因为它会使事情过于复杂。你可以做同样的事情:
while(strlen($word) < width)
{
// Split a section of text of width "width"
// and add it to array.
}