Php 根据特定线宽拆分单词的递归(gd图像)

Php 根据特定线宽拆分单词的递归(gd图像),php,recursion,gd,Php,Recursion,Gd,我正在制作一个应用程序,允许用户使用GD图像在图像上书写。imagebox具有一定的宽度。当用户写的单词超过我的imagebox的宽度时,我面临一个问题。我想用一个递归来分解这个词,我不是那么专业。这是我的 function cutLongWord($word, $fullwidth, $font, $fontsize){ $arrWords = array(); splitWord($arrWords, $word, $fullwidth, 0, $font, $fonts

我正在制作一个应用程序,允许用户使用GD图像在图像上书写。imagebox具有一定的宽度。当用户写的单词超过我的imagebox的宽度时,我面临一个问题。我想用一个递归来分解这个词,我不是那么专业。这是我的

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;
}
函数cutLongWord($word、$fullwidth、$font、$fontsize){
$arrWords=array();
splitWord($arrWords,$word,$fullwidth,0,$font,$fontsize);
}
函数splitWord(&$arrWords、$word、$fullwidth、$startIndex、$font、$fontsize){
$output=“”;
$numStringLength=strlen($word);

对于($i=1;($i+$startIndex)您可能不需要为此使用递归,因为它会使事情变得过于复杂。您可能也可以这样做:

while(strlen($word) < width)
{
    // Split a section of text of width "width"
    // and add it to array.
}
while(strlen($word)
看看或。那会容易得多。再看看注释。这些都是类似的函数。我想你的无限循环就在这里:$arrWords[]=splitWord(&$arrWords,$word,$fullwidth,($I-1),$font,$fontsize);如果单词不符合要求,则再次拆分整个单词,但单词也不符合要求,因此on@redreggaewordwrap和chunk_split的问题是我使用了变量fontsize,所以我必须做一些其他的计算,现在一行上有多少个字符rs,如果你说“mmmm”或“iiii”(m比i宽).我已经看过了这些评论,但这并不是我所需要的。我用一个while循环重新编程了它,现在它可以工作了。我只是觉得有一天我应该掌握递归的窍门,因为它似乎是一个强大的工具。在这种情况下,我想问题可能在于你有一个for循环和递归。试着沿着这条思路做一些事情s:
函数splitword(…){if($word>=$fullwidth){$arrWords=splitword(…)}返回$arrWords}
一旦你了解了递归,它就会变得更有意义。