PHPで、テキストをトリミングする再帰関数を作成しました。トリミングされたテキストの最後には...が付加されます。トリミングされていないテキストは、元の状態で返されます。
テキストが最大幅に収まる場合に機能します。ただし、指定された幅に収まらない場合、関数は値を返しませんが、返す必要があります。returnステートメント全体が無視されているようです。リターンをエコーに置き換えると、正しい値が表示されます。
期待される結果:
-TEST ZIN
-TEST ZI
-TEST Z
-TEST
-TES
-TE ...(ここには何も返されないため、これは表示されません)
function check_length($str, $max, $size = SIZE, $rec = false) {
echo "FUNCTION $str ";
list($left, , $right) = imageftbbox($size, 0, FONTURL, $str);
if($rec == false) {
if(($right - $left) > $max) {
echo 'if 1<br />';
check_length(substr($str, 0, -1), $max, $size, true);
} else {
echo 'else 1<br />';
return $str;
}
} else {
if(($right - $left) > ($max - 9)) {
echo 'if 2<br />';
check_length(substr($str, 0, -1), $max, $size, true);
} else {
echo 'else 2<br />';
return "$str...";
}
}
}
echo check_length('TEST ZIN', 30);
注:関数内のエコーはデバッグ用です。
前もって感謝します。