Как получить случайное значение из массива

У меня есть массив с именем $ran = array(1,2,3,4);

Мне нужно получить случайное значение из этого массива и сохранить его в переменной, как я могу это сделать?

Вы также можете сделать:

 $k = array_rand($array); $v = $array[$k]; 

Это способ сделать это, когда у вас есть ассоциативный массив.

PHP предоставляет функцию только для этого: array_rand ()
http://php.net/manual/en/function.array-rand.php

 $ran = array(1,2,3,4); $randomElement = $ran[array_rand($ran, 1)]; 

Вы можете использовать mt_rand ()

 $random = $ran[mt_rand(0, count($ran) - 1)]; 

Это также полезно, как функция, если вам нужно значение

 function random_value($array, $default=null) { $k = mt_rand(0, count($array) - 1); return isset($array[$k])? $array[$k]: $default; } 
 $value = $array[array_rand($array)]; 

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

 $myArray = array(1, 2, 3, 4, 5); // Random shuffle shuffle($myArray); // First element is random now $randomValue = $myArray[0]; 

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

 $array = array("one", "two", "three", "four", "five", "six"); echo $array[array_rand($array, 1)]; 

или вы можете использовать функции rand и count для выбора случайного индекса.

 $array = array("one", "two", "three", "four", "five", "six"); echo $array[rand(0, count($array) - 1)]; 

Производится из Collection::random() Laravel Collection::random() :

 function array_random($array, $amount = 1) { $keys = array_rand($array, $amount); if ($amount == 1) { return $array[$keys]; } $results = []; foreach ($keys as $key) { $results[] = $array[$key]; } return $results; } 

Применение:

 $items = ['foo', 'bar', 'baz', 'lorem'=>'ipsum']; array_random($items); // 'bar' array_random($items, 2); // ['foo', 'ipsum'] 

Несколько примечаний:

  • $amount должна быть меньше или равна count($array) .
  • array_rand() не перетасовывает ключи (начиная с PHP 5.2.10, см. 48224 ), поэтому выбранные вами элементы всегда будут в оригинальном порядке. При необходимости используйте shuffle() .

Документация: array_rand() , shuffle()

edit: Функция Laravel заметно выросла с тех пор, см. Laravel 5.4's Arr::random() . Вот что-то более сложное, вытекающее из взрослой функции Laravel:

 function array_random($array, $number = null) { $requested = ($number === null) ? 1 : $number; $count = count($array); if ($requested > $count) { throw new \RangeException( "You requested {$requested} items, but there are only {$count} items available." ); } if ($number === null) { return $array[array_rand($array)]; } if ((int) $number === 0) { return []; } $keys = (array) array_rand($array, $number); $results = []; foreach ($keys as $key) { $results[] = $array[$key]; } return $results; } 

Несколько основных моментов:

  • Выбросить исключение, если не хватает доступных предметов
  • array_random($array, 1) возвращает массив из одного элемента ( # 19826 )
  • Значение поддержки «0» для количества элементов ( # 20439 )
 $rand = rand(1,4); 

или, в частности, для массивов:

 $array = array('a value', 'another value', 'just some value', 'not some value'); $rand = $array[ rand(0, count($array)-1) ]; 

Имеет ли ваш выбор какие-либо последствия для безопасности? Если это так, используйте random_int() и array_keys() . ( random_bytes() – только PHP 7, но для PHP 5 существует полиполк ).

 function random_index(array $source) { $max = count($source) - 1; $r = random_int(0, $max); $k = array_keys($source); return $k[$r]; } 

Применение:

 $array = [ 'apple' => 1234, 'boy' => 2345, 'cat' => 3456, 'dog' => 4567, 'echo' => 5678, 'fortune' => 6789 ]; $i = random_index($array); var_dump([$i, $array[$i]]); 

Демо: https://3v4l.org/1joB1

Используйте rand (), чтобы получить случайное число для эхо-случайного ключа. В ex: 0 – 3

 $ran = array(1,2,3,4); echo $ran[rand(0,3)]; 

Я основываю свой ответ на функции @ ÓlafurWaage. Я попытался использовать его, но столкнулся со справочными проблемами, когда попытался изменить возвращаемый объект. Я обновил его функцию для передачи и возврата по ссылке. Новая функция:

 function &random_value(&$array, $default=null) { $k = mt_rand(0, count($array) - 1); if (isset($array[$k])) { return $array[$k]; } else { return $default; } } 

Для получения дополнительной информации см. Мой вопрос в разделе « Передача / Возврат ссылок на объект + изменение объекта» не работает

Другая альтернатива чистым Mysql:

 $result = mysql_query("select group_id from menu_groups group by group_id order by rand() limit 1"); $rand_group= mysql_fetch_row($result); $rand_group_id= $rand_group['group_id']; 

Вы получаете случайное число из массива следующим образом:

 $randomValue = array_rand($rand,1);