2014-10-11 2 views
2

Как я понимаю, функция array_rand выберет случайный ключ из массива. Но что, если мне нужно вернуть все ключи рандомизированным?Доза array_rand() может вернуть все рандомизированные ключи

Вот мой код:

$answers=array("$q->answer_1", "$q->answer_2", "$q->answer_right"); 
     $randKey=array_rand($answers,3); 
     echo $answers[$randKey[0]]."<br/>"; 
     echo $answers[$randKey[1]]."<br/>"; 
     echo $answers[$randKey[2]]."<br/>"; 

Таким образом, количество ключей 3 и мне нужно, чтобы вернуть три клавиши рандомизированные. Как я могу это сделать?

В моем примере это не рандомизирует что-либо; он просто отображает

"$q->answer_1", "$q->answer_2", "$q->answer_right" 

правильного ответа на kingkero и Бен был

$answers=array("$q->answer_1", "$q->answer_2", "$q->answer_right"); 
     $ranKey=shuffle($answers); 
     echo $answers[0]."<br />"; 
     echo $answers[1]."<br />"; 
     echo $answers[2]."<br />"; 
+5

Что? Почему бы вам просто ['shuffle()'] (http://php.net/manual/function.shuffle.php) исходный массив? – kero

+1

Обратите внимание, что если вы посмотрите на журнал изменений на странице [справочная страница] (http://php.net/manual/en/function.array-rand.php) для 'array_rand', вы увидите, что« [t ] В результате массив ключей больше не перетасовывается "с версии 5.2.10. Вот почему вы возвращаете ключи в первоначальном порядке. – Ben

+0

спасибо @kingkero и Ben он отлично справился теперь, спасибо за это и +1 за обоих. –

ответ

2

Вместо того, чтобы получать один случайный ключ за раз, гораздо проще просто заказать исходный массив в произвольном порядке. PHP предлагает функцию для этого:

$answers = shuffle($answers); 
foreach ($answers as $answer) { 
    echo $answer."<br/>"; 
} 
+0

'shuffle()' возвращает 'true'. Не станет ли это выглядеть как 'foreach (true as true) {echo true."
";}' –

1

вы пишете для каждого случайного возврата вы 3 пункта, но вы массив все 3 шт попробовать этот

$answers=array("$q->answer_1", "$q->answer_2", "$q->answer_right"); 
     $randKey=array_rand($answers); 
     print_r($randKey); 

или добавить еще товар в массив

$answers=array("$q->answer_1", "$q->answer_2", "$q->answer_right", '0', '1', '2'); 
     $randKey=array_rand($answers,3); 
     echo $answers[$randKey[0]]."<br/>"; 
     echo $answers[$randKey[1]]."<br/>"; 
     echo $answers[$randKey[2]]."<br/>"; 
+0

, конечно, он не вернет ''0', '1', '2'' в качестве результатов, которые мне не нужны, и в ex.1 он вернет только один ключ из массива, который я тоже не хочу. в любом случае спасибо за усилия. –

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