PHP中shuffle
和array_rand
函数之间究竟有什么区别?如果没有差别哪个更快。
由于
答案 0 :(得分:9)
在数组上调用时, shuffle
会随机化该数组的所有元素的顺序。
例如,以下代码部分:
$arr = array(1, 2, 3, 4, 5);
shuffle($arr);
var_dump($arr);
可以提供此输出:
array
0 => int 3
1 => int 1
2 => int 5
3 => int 4
4 => int 2
整个数组本身都会被修改。
在数组上调用时, array_rand
会从该数组中返回一个或多个键,随机选择。
例如,以下代码部分:
$arr = array(1, 2, 3, 4, 5);
$randomly_selected = array_rand($arr, 3);
var_dump($randomly_selected);
可以给出一些输出:
array
0 => int 0
1 => int 2
2 => int 3
返回初始数组的子数组 - 并且不修改初始数组。
答案 1 :(得分:4)
shuffle
以随机顺序重新排序数组。 此函数通过引用获取数组,因为它正在改变数组的内部结构,而不仅仅是访问它,而array_rand
只是在数组中返回一个随机索引。
答案 2 :(得分:2)
通过更改 $ no 参数,我尝试使用代码片段来测试这两个函数的性能。即使在大阵列中也没有太大差异。大部分时间介于1x10 -5 秒和5x10 -5
之间$time_start = microtime(true);
$rand_keys = array_rand($myArray, $no);
echo (microtime(true)-$time_start)."\n";
$time_start = microtime(true);
shuffle($myArray);
echo (microtime(true)-$time_start)."\n";
答案 3 :(得分:1)
shuffle
会影响数组键并通过引用使用其参数。 shuffle
曾经在旧版本的PHP中随机化方面很弱,但现在已不再适用。
array_rand
保留原始数组,并有一个可选参数,允许您选择要返回的元素数。
答案 4 :(得分:1)
shuffle
更改数组元素的顺序。这是一个排序功能。
array_rand
返回n
(参数[1],默认为1)数组中的随机元素。它返回一个键(用于arguments [1] == 1)或一个键数组(用于参数[1]> 1),它引用数组的元素(arguments [0])。
答案 5 :(得分:1)
Shuffle()
获取整个数组并随机化其中元素的位置。 [注意:在早期版本的PHP中,shuffle()算法很差]
array_rand()
接受一个数组并返回一个或多个随机选择的条目。 array_rand()的优点是它保留原始数组。