0

我正在制作一个应用程序,让用户使用 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;
}

这是一个无限循环。我有点卡住了。如果您能指出我正确的方向,我将不胜感激。

谢谢。

4

1 回答 1

0

您可能不需要为此使用递归,因为它使事情变得过于复杂。您可能可以这样做:

while(strlen($word) < width)
{
    // Split a section of text of width "width"
    // and add it to array.
}
于 2013-05-24T08:38:58.580 回答