PHP Conference Japan 2024

Random\Randomizer::shuffleBytes

(PHP 8 >= 8.2.0)

Random\Randomizer::shuffleBytes取得字串的位元組層級排列

描述

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

傳回輸入 bytes 的均勻選取排列。

輸入 bytes 的每個可能排列都同樣有可能被傳回。

參數

bytes

要洗牌其位元組的 string

輸入 string 將不會被修改。

傳回值

bytes 的位元組排列。

錯誤/例外

範例

範例 #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
新增註解

使用者貢獻的註解 1 則註解

1
okerem@github
1 年前
對於 Unicode 安全的洗牌:

<?php
$r
= new \Random\Randomizer();
$s = join($r->shuffleArray(mb_str_split($string)));
To Top