有次,其中array_rand()
是不够的。
虽然我知道它返回键,而不是值,我觉得它的名字不清楚。
但最重要的, array_rand()
不给平等的机会所有按键(如看到Array_rand不洗牌或Array_rand不是随机和很多其他的例子)。
更好地随机排列的一个显着的方式是函数shuffle()
但它可以很ressources苛刻,再加上如果该键是重要的,以及它们与它失去了。
这将是一个很好的和更快的替代方案给略显笨拙的功能?
有次,其中array_rand()
是不够的。
虽然我知道它返回键,而不是值,我觉得它的名字不清楚。
但最重要的, array_rand()
不给平等的机会所有按键(如看到Array_rand不洗牌或Array_rand不是随机和很多其他的例子)。
更好地随机排列的一个显着的方式是函数shuffle()
但它可以很ressources苛刻,再加上如果该键是重要的,以及它们与它失去了。
这将是一个很好的和更快的替代方案给略显笨拙的功能?
我想出了这两个功能:
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,它们可以只给一个元素。
(援助,从一个答案如何获得随机值了数组 )
我不同意你的说法:
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).",";
但我依然会建议你使用预定义的功能,因为他们深受开发人员进行测试。