I want to create a function to print a list of 50 random floats from 0 to 1.
The function to print one random float is simply :
function random_from_0_to_1()
{
return (float)rand() / (float)getrandmax();
}
But how do I get a list of 50 numbers in descending order?
I want to use usort() function, but I am not sure how to use it with a list of 50 random floats.
Advertisement
Answer
Generate a array of floats, sort with sort(), then reverse the array to give descending order.
So, using your function:
<?php
function random_from_0_to_1()
{
return (float)rand() / (float)getrandmax();
}
$arr = [];
for ($i=0;$i<50;$i++) {
$arr[] = random_from_0_to_1();
}
sort($arr); // sorts ascending
$arr = array_reverse($arr);
var_dump($arr);
Output:
array(50) {
[0]=>
float(0.9991139778863238)
[1]=>
float(0.9733540797482031)
[2]=>
float(0.9620095835821748)
[3]=>
float(0.9390542404442347)
[4]=>
float(0.9368096925023989)
[5]=>
float(0.9321818514411253)
[6]=>
float(0.9321091510039331)
...
Demo: https://3v4l.org/NJvGu
[Edit]
Since you’ve specifically asked for a version with usort(), try this, which substitutes usort() for sort() and array_reverse():
<?php
function random_from_0_to_1()
{
return (float)rand() / (float)getrandmax();
}
$arr = [];
for ($i=0;$i<50;$i++) {
$arr[] = random_from_0_to_1();
}
usort($arr, function($a,$b){return $b<=>$a;}); // Note parameters reversed in spaceship comparison
var_dump($arr);
Demo: https://3v4l.org/qn7Ka