【PHP】知っていると楽!wordwrapで簡単に文字列の指定箇所に文字を挿入しよう!
開発している中で先日出会った、あまり知られてなさそうだけど便利なPHP関数を紹介したいと思います。
私自身PHP歴が1年も無いのでそんなのみんな知ってるよ、と思われてしまうかも知れませんが気にせず書いちゃいます。
「知ってても怒らないで〜」
プログラミングやWordPressを習得するのに一番近道な方法とは?
wordwrap — 文字列の指定箇所に文字を挿入できる
詳しい解説はマニュアルを見て頂ければと思いますが、このwordwrapはsubstrで文字列を区切って新たに文字列を結合してごちゃごちゃする時や、ある一定の文字数で改行を入れたい時などに重宝する関数です。
この関数は基本的に文章を分割するという想定なので、単語を途中で分割して良いのかどうかを4つ目の引数で選択出来るのです。
単語かどうかの判定はスペースで区切られていると単語と判定しています。
trueにすると単語が途中でも分割しますが、falseにすると単語は分割されないようになります。
wordwrapの使い方
1 | wordwrap("対象の文字列", "指定の文字数", "挿入する文字", true/false); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | /* 金額表示の3桁ずつカンマを楽にやりたい */ $str = "2000000"; $wordwrapStr = wordwrap($str, 3, ",", true); echo $wordwrapStr; // 出力結果 ↓ // 2,000,000 /* 10文字ごとに改行したい */ $str = "abcdefghijklmnopqrstuvwxyz"; $wordwrapStr = wordwrap($str, 10, "<br>\n", true); echo $wordwrapStr; // 出力結果 ↓ // abcdefghij<br> // klmnopqrst<br> // uvwxyz /* 単語に分かれている文字列をtrueで実行 */ $str = "A very long woooooooooooord."; $wordwrapStr = wordwrap($str, 8, "<br>\n", true); echo $wordwrapStr; // 出力結果 ↓ // A very<br> // long<br> // wooooooo<br> // ooooord. /* (解説) 一つの単語のwoooooooooooordが8文字以上なので途中で分割された。*/ /* 単語に分かれている文字列をfalseで実行 */ $str = "A very long woooooooooooord."; $wordwrapStr = wordwrap($str, 8, "<br>\n", false); echo $wordwrapStr; // 出力結果 // A very<br> // long<br> // woooooooooooord. /* (解説) 一つの単語のwoooooooooooordは8文字以上でも分割されない。*/ |
色々な使い方が出来ますね。
ところでマルチバイトな日本語対応ですが、このままでは使用は出来ません。
しかしマニュアルでmb_wordwrapなるものを作成してくれている方がいますので、こちらを使わせてもらいましょう。
日本語対応[引用]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | function mb_wordwrap($string, $width=75, $break="\n", $cut = false) { if (!$cut) { $regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){'.$width.',}\b#U'; } else { $regexp = '#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){'.$width.'}#'; } $string_length = mb_strlen($string,'UTF-8'); $cut_length = ceil($string_length / $width); $i = 1; $return = ''; while ($i < $cut_length) { preg_match($regexp, $string,$matches); $new_string = $matches[0]; $return .= $new_string.$break; $string = substr($string, strlen($new_string)); $i++; } return $return.$string; } $mb_string = "こんにちは";//Hello in Japanese $cut_mb_string = mb_wordwrap($mb_string,1," ",true); //こ ん に ち は print($cut_mb_string); |
この関数はメーラーなどを作る際にもよく使用されているようです。
メールだと文章を途中で改行しないと見づらくなってしまいますからね。
楽できる関数はとことん使っちゃいましょう。