A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://www.php.net/manual/en/function.array-rand.php below:

PHP: array_rand - Manual

array_rand

(PHP 4, PHP 5, PHP 7, PHP 8)

array_randPick one or more random keys out of an array

Description Caution

This function does not generate cryptographically secure values, and must not be used for cryptographic purposes, or purposes that require returned values to be unguessable.

If cryptographically secure randomness is required, the Random\Randomizer may be used with the Random\Engine\Secure engine. For simple use cases, the random_int() and random_bytes() functions provide a convenient and secure API that is backed by the operating system’s CSPRNG.

Parameters
array

The input array. Cannot be empty.

num

Specifies how many entries should be picked. Must be greater than zero, and less than or equal to the length of array

Return Values

When picking only one entry, array_rand() returns the key for a random entry. Otherwise, an array of keys for the random entries is returned. This is done so that random keys can be picked from the array as well as random values. If multiple keys are returned, they will be returned in the order they were present in the original array.

Errors/Exceptions

Throws a ValueError if array is empty, or if num is out of range.

Changelog Version Description 8.0.0 array_rand() now throws a ValueError if num is out of range; previously an E_WARNING was raised, and the function returned null. 8.0.0 array_rand() now throws a ValueError if array is empty; previously an E_WARNING was raised, and the function returned null. 7.1.0 The internal randomization algorithm has been changed to use the » Mersenne Twister Random Number Generator instead of the libc rand function. Examples

Example #1 array_rand() example

<?php
$input
= array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($input, 2);
echo
$input[$rand_keys[0]] . "\n";
echo
$input[$rand_keys[1]] . "\n";
?>

Anonymous

15 years ago

If the array elements are unique, and are all integers or strings, here is a simple way to pick $n random *values* (not keys) from an array $array:

<?php array_rand(array_flip($array), $n); ?>

Anonymous

13 years ago

It doesn't explicitly say it in the documentation, but PHP won't pick the same key twice in one call.

grzeniufication

7 years ago

<?phpfunction array_random(array $array, int $n = 1): array
{
if (
$n < 1 || $n > count($array)) {
throw new
OutOfBoundsException();
}

return (

$n !== 1)
?
array_values(array_intersect_key($array, array_flip(array_rand($array, $n))))
: array(
$array[array_rand($array)]);
}
grzeniufication

7 years ago

<?php
$a = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g' ];
$n = 3;print_r( array_intersect_key( $a, array_flip( array_rand( $a, $n ) ) ) );print_r( array_values( array_intersect_key( $a, array_flip( array_rand( $a, $n ) ) ) ) );
fulachan2 at gmail dot com

3 years ago

array_rand () takes a random value without ever being able to go back in its choice of random value.
A simple example:
I decide to mix an array of 10 entries to retrieve 3 values. This choice will give increasing and random values.

$myarray = range(1,10);

$pm = array_rand($myarray,3);


// $pm return array(0->0,1->6,2->8)

But if I decide to shuffle an array of 10 entries to get 10 entries, array_rand () will choose to assign a value to each return value and therefore the return array will not be random.

$gm = array_rand($myarray,count($myarray));


// $gm not random array(0->0,1->1,2->2,3->3,4->4,5->5,6->6,7->7,8->8,9->9)

The easiest way to have a truly random value:


either use array_rand () in a loop of 1 value at a time

$deg = range(-60,60);


$size = range(16,64);
$color = ["blue","red","green","pink","orange","purple","grey","darkgreen","darkkhaki"];
$i = 0;
$longueur = 10;
do{
++$i;
printf("<span style='transform: rotateZ(%ddeg); display: inline-block;font-size: %spx; color:%s'>%s</span>",
$deg[array_rand($deg)],
$size[array_rand($size)],
$color[array_rand($color)],
$alnum[array_rand($alnum)]);

}while($i < $longueur);

------------------


or simply use shuffle () to shuffle the array really randomly.
divinity76+spam at gmail dot com

3 years ago

for a cryptographically secure version, try

<?phpfunction array_rand_cryptographically_secure(array $array){
$max = count ( $array ) - 1;
if (
$max < 0) {
throw new
ValueError ( 'Argument #1 ($array) cannot be empty' );
}
return
key ( array_slice ( $array, random_int ( 0, $max ), 1, true ) );
}
$tests = [
[
5, 6, 7],
[
'a' => 1, 'b' => 2, 'c' => 3],
[
'zero', 4 => 'four', 9 => 'nine'],
[
"PEAN"=>0],
[]
];
foreach (
$tests as $test) {
echo
array_rand_cryptographically_secure($test) . "\n";
}
?>


(this is an improved version, which unlike the first version, avoids copying *all* the keys)

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4