PHP与shuffle和array_rand之间的区别

时间:2010-05-02 11:14:56

标签: php

PHP中shufflearray_rand函数之间究竟有什么区别?如果没有差别哪个更快。

由于

6 个答案:

答案 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()的优点是它保留原始数组。