具有特定逻辑的随机数组

时间:2018-03-30 15:06:24

标签: php arrays

我有6个用户,我想为每个用户洗一个数组但是有一个特定的逻辑。

我有这样的数组:

$a = array(1, 6, 8);

当洗牌时,它会给我这些结果:

shuffle($a); //array(8,6,1) or array(8,1,6) or ...

我想为特定用户重新排列数组,并且每次都为该用户提供相同的内容:

    对于id等于1的user
  • ,每次都给出这个数组(6,8,1)的数组
  • 对于id等于2的user
  • ,每次都给出这个数组(1,8,6)的数组

换句话说,我想用私钥对数组进行洗牌!

2 个答案:

答案 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函数中的逻辑...