Random\Randomizer::shuffleBytes

指定された文字列の、バイト単位の順列を取得する

説明

public string Random\Randomizer::shuffleBytes(string $bytes)

指定された bytes のあり得る順列から、 等確率に選ばれた順列を返します。

指定された bytes のあり得る順列それぞれが、返される確率は等しくなります。

パラメータ

bytes

バイト単位でシャッフルする文字列

指定された文字列は変更されません。

戻り値

bytes の、 バイト単位の順列を返します。

エラー / 例外

  • Random\Randomizer::$engine に存在する Random\Engine::generate メソッド がスローした、あらゆる Throwable がスローされます。

例1 Random\Randomizer::shuffleBytes の例

<?php
$r 
= new \Random\Randomizer();

// 文字列中のバイト列をシャッフルします
echo "«"$r->shuffleBytes("PHP is great!"), "»\n";
?>

上の例の出力は、 たとえば以下のようになります。

« ga rHs!PPiet»

例2 バイト単位でシャッフルするとUnicode文字は壊れる

<?php
$r 
= new \Random\Randomizer();

$unicode "🍎, 🥝, 🍌, 🍑, 🍇";
$shuffled $r->shuffleBytes$unicode );

// バイト単位で ASCII でない文字をシャッフルすると、値が壊れてしまいます。
// その結果、(Unicode 置換文字によって示される)不正なシーケンスが生成されたり、
// 完全に異なる文字が出力に現れたりします。
echo "Original: "$unicode"\n";
echo 
"Shuffled: «"$shuffled"»\n";
echo 
"Shuffled Bytes: "bin2hex($shuffled), "\n";
?>

上の例の出力は、 たとえば以下のようになります。

Original: 🍎, 🥝, 🍌, 🍑, 🍇
Shuffled: «� ��,�����🍟,� �� �, �,��»
Shuffled Bytes: 87208e912c8d9fa5f0f0f09f8d9f2cf09f208c9d20f02c209f2c8d8d