array_rand返回相同的值

时间:2016-03-02 22:52:14

标签: php

如果指定的条目数与数组中的项数相同,则返回随机数组键时出现问题。

$rdm = array_rand($similar_product_array, 4);
如果数组中有4个项目,

将始终返回键值0,1,2,3。

例如:

// Items in array
array (size=4)
  0 => string 'Batman Heroes Edition Nendoroid' (length=31)
  1 => string 'Oberyn' (length=6)
  2 => string 'White Walker' (length=12)
  3 => string 'Avengers Age of Ultron Hulk' (length=27)

// "randomly" generated array keys is always 0 , 1, 2, 3
array (size=4)
  0 => int 0
  1 => int 1
  2 => int 2
  3 => int 3

然而,如果我有:

$rdm = array_rand($similar_product_array, 3);

// Returns randomly as expected
array (size=3)
  0 => int 0
  1 => int 2
  2 => int 3

它将返回随机生成的键。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:5)

你误解了array_rand()函数的用途,它应该从数组中提供随机条目,但不是随机顺序。这意味着如果你要从4个项目的数组中要求4个随机项目,它将始终返回所有项目(按原始顺序)。

如果您只需要随机更改数组条目的顺序,请使用shuffle()函数,例如以这种方式:

In [24]: %paste
class animal(object):
    def do_stuff(self):
        return self.yell()


In [25]: %paste
class dog(animal):
    def yell(self):
        print("yelling")

In [26]: d = dog()

In [27]: d.do_stuff()
yelling