How to get random value out of an array?

PhpArraysRandom

Php Problem Overview


I have an array called $ran = array(1,2,3,4);

I need to get a random value out of this array and store it in a variable, how can I do this?

Php Solutions


Solution 1 - Php

You can also do just:

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

This is the way to do it when you have an associative array.

Solution 2 - Php

PHP provides a function just for that: array_rand()
http://php.net/manual/en/function.array-rand.php

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

Solution 3 - Php

$value = $array[array_rand($array)];

Solution 4 - Php

You can use mt_rand()

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

This comes in handy as a function as well if you need the value

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

Solution 5 - Php

You could use the array_rand function to select a random key from your array like below.

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

or you could use the rand and count functions to select a random index.

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

Solution 6 - Php

Derived from 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;
}

Usage:

$items = ['foo', 'bar', 'baz', 'lorem'=>'ipsum'];

array_random($items); // 'bar'
array_random($items, 2); // ['foo', 'ipsum']

A few notes:

  • $amount has to be less than or equal to count($array).
  • array_rand() doesn't shuffle keys (since PHP 5.2.10, see 48224), so your picked items will always be in original order. Use shuffle() afterwards if needed.


Documentation: array_rand(), shuffle()


edit: The Laravel function has noticeably grown since then, see Laravel 5.4's Arr::random(). Here is something more elaborate, derived from the grown-up Laravel function:

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;
}

A few highlights:

  • Throw exception if there are not enough items available
  • array_random($array, 1) returns an array of one item (#19826)
  • Support value "0" for the number of items (#20439)

Solution 7 - Php

The array_rand function seems to have an uneven distribution on large arrays, not every array item is equally likely to get picked. Using shuffle on the array and then taking the first element doesn't have this problem:

$myArray = array(1, 2, 3, 4, 5);

// Random shuffle
shuffle($myArray);

// First element is random now
$randomValue = $myArray[0];

Solution 8 - Php

Another approach through flipping array to get direct value.

Snippet

$array = [ 'Name1' => 'John', 'Name2' => 'Jane', 'Name3' => 'Jonny' ];
$val = array_rand(array_flip($array));

array_rand return key not value. So, we're flipping value as key.

Note: PHP key alway be an unique key, so when array is flipped, duplicate value as a key will be overwritten.

Solution 9 - Php

$rand = rand(1,4);

or, for arrays specifically:

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

Solution 10 - Php

In my case, I have to get 2 values what are objects. I share this simple solution.

$ran = array("a","b","c","d");
$ranval = array_map(function($i) use($ran){return $ran[$i];},array_rand($ran,2));

Solution 11 - Php

On-liner:

echo $array[array_rand($array,1)]

Solution 12 - Php

One line: $ran[rand(0, count($ran) - 1)]

Solution 13 - Php

I needed one line version for short array:

($array = [1, 2, 3, 4])[mt_rand(0, count($array) - 1)]

or if array is fixed:

[1, 2, 3, 4][mt_rand(0, 3]

Solution 14 - Php

Does your selection have any security implications? If so, use random_int() and array_keys(). (random_bytes() is PHP 7 only, but there is a polyfill for PHP 5).

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

Usage:

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

Demo: https://3v4l.org/1joB1

Solution 15 - Php

Use rand() to get random number to echo random key. In ex: 0 - 3

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

Solution 16 - Php

This will work nicely with in-line arrays. Plus, I think things are tidier and more reusable when wrapped up in a function.

function array_rand_value($a) {
	return $a[array_rand($a)];
}

Usage:

array_rand_value(array("a", "b", "c", "d"));

On PHP < 7.1.0, array_rand() uses rand(), so you wouldn't want to this function for anything related to security or cryptography. On PHP 7.1.0+, use this function without concern since rand() has been aliased to mt_rand().

Solution 17 - Php

I'm basing my answer off of @ÓlafurWaage's function. I tried to use it but was running into reference issues when I had tried to modify the return object. I updated his function to pass and return by reference. The new function is:

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

For more context, see my question over at https://stackoverflow.com/questions/32702536/passing-returning-references-to-object-changing-object-is-not-working

Solution 18 - Php

A simple way to getting Randdom value form Array.

$color_array =["red","green","blue","light_orange"];
$color_array[rand(0,3)

now every time you will get different colors from Array.

Solution 19 - Php

Get random values from an array.

function random($array)
{
    /// Determine array is associative or not
    $keys = array_keys($array);
    $givenArrIsAssoc = array_keys($keys) !== $keys;

    /// if array is not associative then return random element
    if(!$givenArrIsAssoc){
        return $array[array_rand($array)];
    }

    /// If array is associative then 
    $keys = array_rand($array, $number);
    $results = [];
    foreach ((array) $keys as $key) {
        $results[] = $array[$key];
    }
    return $results;
}

Solution 20 - Php

You get a random number out of an array as follows:

$randomValue = $rand[array_rand($rand,1)];
 

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionElitmiarView Question on Stackoverflow
Solution 1 - Phpreko_tView Answer on Stackoverflow
Solution 2 - PhpNDMView Answer on Stackoverflow
Solution 3 - PhpKASView Answer on Stackoverflow
Solution 4 - PhpÓlafur WaageView Answer on Stackoverflow
Solution 5 - PhpTURTLEView Answer on Stackoverflow
Solution 6 - PhpGras DoubleView Answer on Stackoverflow
Solution 7 - PhpAsciiomView Answer on Stackoverflow
Solution 8 - PhpShahnawaz KadariView Answer on Stackoverflow
Solution 9 - PhpDurothView Answer on Stackoverflow
Solution 10 - PhpCN LeeView Answer on Stackoverflow
Solution 11 - PhpSidView Answer on Stackoverflow
Solution 12 - PhpAbdelilahView Answer on Stackoverflow
Solution 13 - PhpRafaelView Answer on Stackoverflow
Solution 14 - PhpScott ArciszewskiView Answer on Stackoverflow
Solution 15 - PhpMuhammad IbnuhView Answer on Stackoverflow
Solution 16 - PhprinogoView Answer on Stackoverflow
Solution 17 - PhpJeffView Answer on Stackoverflow
Solution 18 - Phppankaj kumarView Answer on Stackoverflow
Solution 19 - Phpdipenparmar12View Answer on Stackoverflow
Solution 20 - PhpAdam Libonatti-RocheView Answer on Stackoverflow