fightstarr20 fightstarr20 - 9 days ago 6
PHP Question

PHP return randomised array

I am trying to create a new array from an existing one with a random number of records between 2 and 10, I have this so far

//Select a random number
$random_number = (rand(2,10));

// Setup an array of names
$names = array("john", "joe", "simon", "peter", "paul");

// Create new array
$random_field_names = array_rand($names, $random_number);

print_r($random_field_names);


This gives me an array that looks like this

Array
(
[0] => 0
[1] => 10
[2] => 11
)


Where am I going wrong?

Answer

The description of array_rand explains why you don't get the names (I stress in bold):

Picks one or more random entries out of an array, and returns the key (or keys) of the random entries.

You seem to want the values. That you can achieve like this:

 array_intersect_key($names,  array_flip(array_rand($names, $random_number)));

Also make sure your random number is not greater than the array size:

$random_number = rand(2,5);
$names = array("john", "joe", "simon", "peter", "paul");
$result = array_intersect_key($names,  array_flip(array_rand($names, $random_number)));
print_r ($result);  

Note that the result maintains the original keys. If you want to renumber the keys to get an indexed array starting with index 0, then apply array_values to the result:

$result = array_values(array_intersect_key($names,  array_flip(array_rand($names, $random_number))));
Comments