Получите пять уникальных случайных значений PHP, выбранных из массива, и поместите их в отдельные переменные - PullRequest
0 голосов
/ 07 июня 2018

У меня есть массив, например:

 array("aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg");

Я хочу выбрать из него пять случайных и уникальных значений и поместить их в пять различных переменных, например:

    $one = "ccc"; 
    $two = "aaa";
    $three = "bbb"; 
    $four = "ggg";
    $five = "ddd";

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

<?php

$arr = $arr_history = array("aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg");

for ( $i = 1; $i < 5; $i++ )
{
  // If the history array is empty, re-populate it.
  if ( empty($arr_history) )
    $arr_history = $arr;

  // Randomize the array.
  array_rand($arr_history);

  // Select the last value from the array.
  $selected = array_pop($arr_history);

  // Echo the selected value.
  echo $selected . PHP_EOL;
 }

Ответы [ 4 ]

0 голосов
/ 07 июня 2018

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

$randomArray = array("aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg");
shuffle($randomArray);

$randomArray = array_slice($randomArray, 0, 5);

$randomArray[0]; //1st element
$randomArray[1]; //2nd element
$randomArray[2]; //3rd element...
0 голосов
/ 07 июня 2018

Вы можете shuffle массив и использовать list для присвоения значений

$arr = array("aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg");

shuffle( $arr );
list($one, $two, $three, $four, $five) = $arr;

Док: shuffle () , list ()

0 голосов
/ 07 июня 2018

Используйте это:

$arr = $arr_history = array("aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg");
$random = [];

for ( $i = 1; $i <= 5; $i++ )
{
  // If the history array is empty, re-populate it.
  if ( empty($arr_history) )
    $arr_history = $arr;

  // Randomize the array.
  array_rand($arr_history);

  // Select the last value from the array.
  $selected = array_pop($arr_history);

  array_push($random, $selected);
}

var_dump($random);
  • Я исправил вашу логику цикла, теперь она отображает 5 элементов вместо 4.
  • Я использую короткий синтаксис для определения массива, для которого требуется 5.4 или выше.

Выход

array(5) {
  [0]=>
  string(3) "ggg"
  [1]=>
  string(3) "fff"
  [2]=>
  string(3) "eee"
  [3]=>
  string(3) "ddd"
  [4]=>
  string(3) "ccc"
}

Пример Live

Repl

0 голосов
/ 07 июня 2018

Это должно работать:

    $arr = array("aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg");

    $tmp = $arr;
    array_rand($tmp);

    $one = $tmp[0];
    $two = $tmp[1];
    ...

Помните, что он не будет проверять, если значение в $ tmp [n] действительно существует

...