对于 Unicode 安全的排列:
<?php
$r = new \Random\Randomizer();
$s = join($r->shuffleArray(mb_str_split($string)));
(PHP 8 >= 8.2.0)
Random\Randomizer::shuffleBytes — 获取字符串的逐字节排列
返回输入 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
对于 Unicode 安全的排列:
<?php
$r = new \Random\Randomizer();
$s = join($r->shuffleArray(mb_str_split($string)));