PHP:比array_rand更好()[Q&A](PHP: Better than array_ra

2019-10-20 22:24发布

有次,其中array_rand()是不够的。

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

但最重要的, array_rand()不给平等的机会所有按键(如看到Array_rand不洗牌或Array_rand不是随机和很多其他的例子)。

更好地随机排列的一个显着的方式是函数shuffle()但它可以很ressources苛刻,再加上如果该键是重要的,以及它们与它失去了。

这将是一个很好的和更快的替代方案给略显笨拙的功能?

Answer 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,它们可以只给一个元素。

(援助,从一个答案如何获得随机值了数组 )



Answer 2:

我不同意你的说法:

array_rand()不给予同等的机会,所有的键。

预先定义的功能,如array_rand()是专门用来做他们的做什么,但如果不知为何,你不希望依靠这一点,想用自己的你可以尝试这样的事:

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).",";

但我依然会建议你使用预定义的功能,因为他们深受开发人员进行测试。



文章来源: PHP: Better than array_rand() [Q&A]