PHP 8.4.24 Released!

Voting

: max(three, nine)?
(Example: nine)

The Note You're Voting On

divinity76+spam at gmail dot com
4 years ago
for a cryptographically secure version, try 

<?php

/**
 * fetch a random key from array, using a cryptograpically secure rng
 * discussed+reviewed at https://codereview.stackexchange.com/questions/275832/cryptographically-secure-version-of-the-core-array-rand-function/
 *
 * @param array $array
 * @throws ValueError if array is empty
 * @return int|string key
 */
function array_rand_cryptographically_secure(array $array)/*: int|string*/ {
    $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)

<< Back to user notes page

To Top