随机播放自定义对象的数组

时间:2015-09-01 14:13:07

标签: php arrays shuffle

我是PHP的新手(来自ASPNET),我在理解为什么这不起作用时遇到了一些麻烦。我想调整一个数组(自定义Quote对象),但是当我调用shuffle()函数时,它似乎只返回一个整数值(可能是一个随机数)。

根据手册,我应该可以调用shuffle并传入我的数组: http://php.net/manual/en/function.shuffle.php

/**
* @public
* Retrieves a collection of Quote objects from the datasource
* @param string $author An optional author to filter on
* @return array 
*/
public function GetRandom($author='') {
  //ToDo: Work out correct way to randomize array!
  //return shuffle($this->GetAllQuotes($author));

  // This is my lame temporary work-around until I work out how to
  // properly randomize the array from $this->GetAllQuotes(string)
  $quotes = $this->GetAllQuotes($author);
  $rand_item = shuffle($quotes);
  $rand_arr[] = $quotes[$rand_item];
  return $rand_arr;
}

/**
* @protected
* Retrieves a collection of Quote objects from the datasource
* @param string $author An optional author to filter on
* @return array 
*/
protected function GetAllQuotes($author='') {
  // This code builds Quotes array from XML datasource
}

我真的很喜欢GetRandom函数返回一个随机数组的Quote对象,而不仅仅是一个,但是shuffle()功能似乎不像宣传的那样工作,至少不是如果数组那样填充自定义对象。

1 个答案:

答案 0 :(得分:2)

Shuffle通过引用获取数组,因此您不能在return语句中使用它内联。 php中的大多数数组排序函数都是参考。

解决方案:

public function GetRandom($author='') {
  $quotes = $this->getAllQuotes($author);
  shuffle($quotes); 
  return $quotes;
}