How to generate 3 no-digit repeated random integers, each with distinct digits in PHP

1 Answer

0 votes
// ------------------------------------------------------------
// Function: generate_number
// Purpose: Create one 3-digit integer with distinct digits,
//          drawn from a shared pool of available digits.
//          The first digit is never zero, so the result
//          is always a true 3-digit integer.
// ------------------------------------------------------------
function generate_number(&$available_digits, $length = 3) {

    // Choose the first digit from the pool, excluding '0'
    $non_zero_digits = array_filter($available_digits, function($d) {
        return $d !== '0';
    });

    $non_zero_digits = array_values($non_zero_digits);
    $first_digit = $non_zero_digits[array_rand($non_zero_digits)];

    // Remove first digit from pool
    $index = array_search($first_digit, $available_digits);
    unset($available_digits[$index]);
    $available_digits = array_values($available_digits);

    // Choose the remaining digits from the updated pool
    $remaining = [];
    for ($i = 1; $i < $length; $i++) {
        $d = $available_digits[array_rand($available_digits)];
        $remaining[] = $d;

        // Remove chosen digit
        $idx = array_search($d, $available_digits);
        unset($available_digits[$idx]);
        $available_digits = array_values($available_digits);
    }

    // Build the number as a string, then convert to int
    $digits_str = $first_digit . implode("", $remaining);
    return intval($digits_str);
}


// ------------------------------------------------------------
// Function: generate_three_distinct_digit_numbers
// Purpose: Produce three integers, each with distinct digits,
//          and no digit repeated across all three numbers.
//          All numbers are guaranteed to be 3 digits long.
// ------------------------------------------------------------
function generate_three_distinct_digit_numbers() {

    // Start with all digits 0–9 as strings
    $digits = [];
    for ($i = 0; $i < 10; $i++) {
        $digits[] = strval($i);
    }

    // Generate three numbers, each 3 digits long
    $n1 = generate_number($digits);
    $n2 = generate_number($digits);
    $n3 = generate_number($digits);

    return [$n1, $n2, $n3];
}


// ------------------------------------------------------------
// Main execution
// ------------------------------------------------------------
for ($i = 0; $i < 5; $i++) {
    $result = generate_three_distinct_digit_numbers();
    echo "(" . $result[0] . ", " . $result[1] . ", " . $result[2] . ")\n";
}


/*
run:

(491, 356, 278)
(647, 389, 201)
(364, 280, 579)
(180, 573, 624)
(472, 869, 105)

*/

 



answered 12 hours ago by avibootz

Related questions

...