PHP:优于array_rand()[Q& A]

时间:2014-09-12 01:39:00

标签: php arrays function random

有时array_rand()不够好。

虽然我知道它返回键而不是值,但我发现它的名字不清楚。

但最重要的是,array_rand()并没有给所有密钥提供相同的机会(如Array_rand does not shuffleArray_rand not random以及其他许多示例所示)。

更好地随机化数组的一个值得注意的方法是函数shuffle(),但它可能需要很多资源,而且如果密钥很重要,那么它们就会丢失。

对于那个略显笨拙的功能,什么是一个好的,更快的替代方案?

2 个答案:

答案 0 :(得分:1)

我想出了这两个功能:

function random_key($array){
    $keys=array_keys($array);
    return $keys[mt_rand(0, count($keys) - 1)];
}

function random_value($array){
    $values=array_values($array);
    return $values[mt_rand(0, count($values) - 1)];
}

它们都适用于任何类型的数组,不会改变原始数组,提供更逼真的随机结果,并且它们的名称是自我描述的。

主要缺点是,与array_rand相反,它们只能提供一个元素。

(得到How to get random value out of an array的回答)

答案 1 :(得分:0)

我不同意你的陈述:

  

array_rand()不会给所有键提供相同的机会。

array_rand()这样的预定义函数旨在实现它们的目的,但如果您不想依赖于此并希望使用自己的函数,则可以尝试这样的事情:< / p>

function array_rand_alternative($array){
  return rand(0,count($array)-1);
}

您可以将此功能测试为:

$a=[5,2,1,3];
for($i=0;$i<10;$i++)
  echo array_rand_alternative($a).",";

但我仍然建议您使用预定义的功能,因为它们经过了开发人员的充分测试。