2015-09-01 3 views
0

Я новичок в 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(), похоже, не работает, как рекламируется, по крайней мере, если массив заполнен пользовательскими объектами.

+3

'перетасовка()' возвращает логическое значение для успеха/неуспеха. Он рандомизирует фактический массив, в котором вы прошли. –

+3

'shuffle()' передает значение по ссылке, нет необходимости назначать его переменной. – Viral

ответ

2

Shuffle берет массив по ссылке, поэтому вы не можете использовать его inline в операторе return. Большинство функций сортировки массивов в php являются ссылочными.

Решение:

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

О, боже мой ... ха-ха ... ну, я чувствую себя глупо. Огромное спасибо. –

+1

@NealBailey Не чувствуйте себя глупо. Я задал гораздо более неосведомленные вопросы. Мой единственный совет - «запомнить руководство» и сохранить его святым -> http://php.net – r3wt

Смежные вопросы