How to generate 7 random numbers out of 33 (1-33) in PHP

1 Answer

0 votes
/**
 * Generate a specified number of unique random numbers
 * from the range 1..$maxNumber.
 *
 * @param int $count     Number of values to generate.
 * @param int $maxNumber Maximum value in the range.
 *
 * @return array<int>
 *
 * @throws InvalidArgumentException
 */
function generateRandomNumbers(int $count, int $maxNumber): array
{
    if ($count < 1) {
        throw new InvalidArgumentException(
            'Count must be greater than zero.'
        );
    }

    if ($count > $maxNumber) {
        throw new InvalidArgumentException(
            'Count cannot be greater than maxNumber.'
        );
    }

    // Create an array: [1, 2, 3, ..., $maxNumber]
    $numbers = range(1, $maxNumber);

    // Randomly shuffle the array
    shuffle($numbers);

    // Return the first $count values
    return array_slice($numbers, 0, $count);
}

// Example usage
try {
    $numbers = generateRandomNumbers(7, 33);

    // Optional
    sort($numbers);

    echo 'Random numbers: ' . implode(', ', $numbers) . PHP_EOL;
} catch (InvalidArgumentException $e) {
    echo 'Error: ' . $e->getMessage() . PHP_EOL;
}


/*
run:

Random numbers: 2, 7, 10, 11, 24, 25, 32

*/

 



answered Oct 28 by avibootz
edited Oct 28 by avibootz
...