私は単純だと思っていたが、かなり複雑になる問題がある。PHPとマルチバイト文字のヘルプ
ローマ字、西ヨーロッパ語、日本語、韓国語の文字と句読点が混在する長いUTF-8文字列があります。多くはマルチバイトの文字ですが、いくつか(私は思う)はそうではありません。
は、私は2つのことを実行する必要があります。
- てください(新しい文字列は、dupesを剥奪して出力)重複文字がないことを確認します。
- ランダムに新しい文字列をシャッフルします。 (申し訳ありませんが、私は右にフォーマットする引用コードを取得するように見えることはできません...)
function uniquechars($string) {
$l = mb_strlen($string);
$unique = array();
for($i = 0; $i < $l; $i++) {
$char = mb_substr($string, $i, 1);
if(!array_key_exists($char, $unique))
$unique[$char] = 0;
$unique[$char]++;
}
$uniquekeys = join('', array_keys($unique));
return $uniquekeys;
}
と:
function unicode_shuffle($string)
{
$len = mb_strlen($string);
$sploded = array();
while($len-- > 0) {
$sploded[] = mb_substr($string, $len, 1);
}
shuffle($sploded);
$shuffled = join('', $sploded);
return $shuffled;
}
これら二つの機能を使用して、誰かが非常に不思議なことに、ユニークな文字列(重複していない)のように見えますが、シャッフルされた文字列には同じ文字数が含まれていません。 (私はブラウザからこれらの文字を強調表示し、別のアプリケーションに切り貼りしています...文字列は常に上記とは異なる長さですが、しばしば変化します...同じ文字数でもありません毎回切り捨てられます!)。
私は申し訳ありませんが、私はPHPについて十分に分かっていないし、自分自身を夢中にするためにコーディングしていますが、ここで間違っているのは何ですか?大きな長い弦をシャッフルするのは簡単にできるはずですが、明らかに思ったよりもはるかに困難です。これを行うもう1つの簡単な方法がありますか?文字列を最初にそれぞれの16進数に変換してそれらをシャッフルし、UTF-8に変換し直す必要がありますか?画面ではなくファイルに出力する必要がありますか?
誰もが何か提案がありますか?申し訳ありませんが、私はこれにはとても新しいので、おそらく私は何か本当にばかなことをしています。
コードを整形するのは簡単です:すべての行の前に4つのスペースを使用し、コードとして認識されます。コードを再フォーマットしてください。 –
私はすでにそれをしました... – apesa
@apea:ありがとう!私は何とか最初の行に4つのスペースしか入れないと思っていました。 – Dave