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

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

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

  • Удаление массива PHP по значению (не ключевое слово)
  • PHP Array Объединить два массива с одним ключом
  • Как заставить PHP использовать строки для ключей массива?
  • Создание вложенного списка из многомерного массива
  • PHP. Проверка наличия или отсутствия индекса массива.
  • Прочитайте каждую строку файла txt новому элементу массива
  • Лучший способ преобразования массива PHP в javascript
  • возможно ли, если обратный вызов в параметре array_filter принимает параметр?
  • Возвращаемый индекс наибольшего значения в массиве
  • Неожиданный скобок '
  • Как удалить повторяющиеся значения из массива в PHP
  • Только переменные могут передаваться по ошибке
  • 13 Solutions collect form web for “Как получить случайное значение из массива”

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

     $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)]; 
     $rand = rand(1,4); 

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

     $array = array('a value', 'another value', 'just some value', 'not some value'); $rand = $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]; } return array_intersect_key($array, array_flip($keys)); } 

    Применение:

     $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() , array_flip() , array_intersect_key() , 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 )

    Имеет ли ваш выбор какие-либо последствия для безопасности? Если это так, используйте 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; } } } else { 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); 
    PHP is the Best Programming Language in the world.