3

マルチバイト文字列に固有の問題があり、文字を削除したり、失ったり、繰り返したりすることなく、PHP で長い UTF-8 エンコードされたマルチバイト文字列をある程度ランダムにシャッフルできる必要があります。

str_shuffle の下の PHP マニュアルには、機能しないマルチバイト関数 (最初のユーザーが提出した関数) があります。 119 文字または 118 文字の文字列が返されました。元の文字列に含まれていない場合でも、重複した文字が表示されることがあります。だからそれは機能的ではありません。

これをより複雑にするために、可能であれば日本語の UTF-8 改行、改行、および句読点も含める必要があります。

UTF-8 mb 文字列を使用して複数の言語を扱った経験のある人は誰でも助けてくれますか? PHPには、これを行うための組み込み関数がありますか? str_shuffle はまさに私が欲しいものです。マルチバイト文字でも機能する必要があるだけです。

どうもありがとう!

4

3 に答える 3

4

mb_strlenとを使用して文字列を分割しmb_substr、配列を作成してから、 を使用しshuffleて再度結合してみてください。(編集:@ Frosty Zの回答でも示されているように。)

PHP 対話型プロンプトの例:

php > $string = "Pretend I'm multibyte!";
php > $len = mb_strlen($string);
php > $sploded = array(); 
php > while($len-- > 0) { $sploded[] = mb_substr($string, $len, 1); }
php > shuffle($sploded);
php > echo join('', $sploded);
rmedt tmu nIb'lyi!eteP

必要に応じて、エンコーディングを確実に指定する必要があります。

于 2011-03-23T20:24:40.523 に答える
0

これもうまくいくはずです。私は願います。

class String
{

    public function mbStrShuffle($string)
    {
        $chars = $this->mbGetChars($string);
        shuffle($chars);
        return implode('', $chars);
    }

    public function mbGetChars($string)
    {
        $chars = [];

        for($i = 0, $length = mb_strlen($string); $i < $length; ++$i)
        {
            $chars[] = mb_substr($string, $i, 1, 'UTF-8');
        }

        return $chars;
    }

}
于 2016-05-11T10:15:15.350 に答える