有时array_rand()
不够好。
虽然我知道它返回键而不是值,但我发现它的名字不清楚。
但最重要的是,array_rand()
并没有给所有密钥提供相同的机会(如Array_rand does not shuffle或Array_rand not random以及其他许多示例所示)。
更好地随机化数组的一个值得注意的方法是函数shuffle()
,但它可能需要很多资源,而且如果密钥很重要,那么它们就会丢失。
对于那个略显笨拙的功能,什么是一个好的,更快的替代方案?
答案 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相反,它们只能提供一个元素。
答案 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).",";
但我仍然建议您使用预定义的功能,因为它们经过了开发人员的充分测试。