私はPHPを学んでおり、再帰を試してみたかった。私は単語を取得する関数を作っており、その長さが30文字を超える場合は半分に分割します。そして私は再帰を作ったので、もし半分の半分が30単語以上であれば、それも同様にそれを分割します。再帰が期待通りに機能しない
function breakLongWords($val) {
$array = explode(" ", $val);
foreach ($array as $key => $word) {
if (strlen($word) > 30) {
for ($i = strlen($word) + 1; $i >= round(strlen($word)/2); $i--) {
$word[$i+1] = $word[$i];
if ($i == round(strlen($word)/2)) {
$word[$i] = " ";
}
}
breakLongWords($word);
$array[$key] = $word;
}
$result = implode(" ", $array);
}
var_dump($result);
}
$str = "SuperDuperExtraGiggaDoubleTrippleSpicyWithCheeseLongUnlimitedString123";
breakLongWords($str);
var_dump関数を使用してrepl.itでテストしています。何とか最後の結果は、4文字(70文字)の代わりに2つの半分に分割された見出し語です。しかし、 "var_dumps"のいずれかが正しい結果を出力します。
string(37) "SuperDuperExtraGigg aDoubleTrippleSpi"
string(35) "cyWithCheeseLongUn limitedString123"
string(73) "SuperDuperExtraGigg aDoubleTrippleSpi cyWithCheeseLongUn limitedString123"
string(71) "SuperDuperExtraGiggaDoubleTrippleSpi cyWithCheeseLongUnlimitedString123"
この問題を解決してもらえますか?
https://repl.it/repls/SeveralBountifulCub
を使用することができ、この質問に見てみてください。https://stackoverflow.com/questions/2648968/あなたのコードにいくつか間違いがあります。 – 1stthomas
なぜあなたは爆発を使用していますか? –
@KshitijKumar関数のreceiveが複数の単語を含むことができる文字列。だから私は文字列を単語の配列に変換し、それぞれをチェックしています。 –