👨👨👦👦のような合成絵文字が入ると無理っぽい。
こちらを見ていたら正規表現的な考え方もできるのかなと思い試したところ無理でした。
コメントにあるように
each_graphemeのように実装して判定するそうです。
私が試してみたもの(合成絵文字に対応できてない)
$string = 'aaaああああ
👿👿👿
👿👿👿
👿👿👿👿👿
👿👿👿
';
$width = 3;
do {
$string = preg_replace('/([^\n]{' . $width. '})([^\n])/u', "$1\n$2", $string, 1, $count);
} while ($count > 0);
var_dump($string);
string(82) "aaa
あああ
あ
👿👿👿
👿👿👿
👿👿👿
👿👿
👿👿👿
"
あれ?違う端末でみたら一文字じゃなくて複数文字に見えるからどっちに合わせるかの問題もありそう…
絵文字を削除したりするのは可能