我有6个用户,我想为每个用户洗一个数组但是有一个特定的逻辑。
我有这样的数组:
$a = array(1, 6, 8);
当洗牌时,它会给我这些结果:
shuffle($a); //array(8,6,1) or array(8,1,6) or ...
我想为特定用户重新排列数组,并且每次都为该用户提供相同的内容:
user
的user
的换句话说,我想用私钥对数组进行洗牌!
答案 0 :(得分:2)
如果您为随机数生成器提供种子,它将以相同的方式随机化同一种子(请参阅下面的版本差异)。因此,使用用户ID 作为种子:
srand(1);
shuffle($a);
输出7.1.0 - 7.2.4
Array
(
[0] => 1
[1] => 8
[2] => 6
)
4.3.0的产出 - 5.6.30,7.0.0 - 7.0.29
Array
(
[0] => 6
[1] => 1
[2] => 8
)
注意:从PHP 7.1.0开始,srand()已成为mt_srand()的别名。
此Example应始终产生相同的结果。
答案 1 :(得分:-1)
引用php.net:
此函数将数组随机化(随机化元素的顺序)。它使用的伪随机数生成器不适合加密目的。
无论你想要得到什么,你都不能使用随机播放,因为它会随机给你一些订单。
如果你想随机做一个数组的命令,根据一些标准使用usort:
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
现在获取cmp函数中的逻辑...