随机排列自定义对象数组

Shuffle array of custom objects

我是 PHP 的新手(来自 ASPNET),我有点难以理解为什么这不起作用。我想打乱一个数组(自定义 Quote 对象),但是当我调用 shuffle() 函数时,它似乎只是 return 一个整数值(大概是一个随机数)。

根据手册,我应该可以调用 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 函数 return 一个随机的 Quote 对象数组,而不是一个单独的数组,但是 shuffle() 功能似乎不像宣传的那样工作,至少如果该数组填充有自定义对象。

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

解决方案:

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