PHP: лучше, чем array_rand ()

Бывают случаи, когда array_rand() недостаточно хорош.

Хотя я знаю, что он возвращает ключи, а не значения, я нахожу его непонятным.

Но самое главное, array_rand() не дает равных шансов для всех ключей (как видно в Array_rand, не перетасовывается, или Array_rand не является случайным и множеством других примеров).

Заметным способом улучшить рандомизацию массива является функция shuffle() но она может быть довольно требовательна к ressources, плюс, если ключи важны, хорошо они теряются вместе с ней.

Что было бы хорошей и быстрой альтернативой этой слегка неуклюжей функции?

Я придумал эти две функции:

 function random_key($array){ $keys=array_keys($array); return $keys[mt_rand(0, count($keys) - 1)]; } function random_value($array){ $values=array_values($array); return $values[mt_rand(0, count($values) - 1)]; } 

Оба они хорошо работают с любыми типами массивов, не изменяют первоначальный, дают более реалистичные случайные результаты, и их имена описываются сами.

Главный недостаток заключается в том, что в отличие от array_rand они могут давать только один элемент.

(Помогли с ответом от Как получить случайное значение из массива )

Я не согласен с вашим заявлением:

array_rand () не дает равных шансов для всех ключей.

Предопределенные функции, такие как array_rand() , предназначены для того, чтобы делать то, для чего они созданы, но если вы каким-то образом не хотите полагаться на это и хотите использовать свои собственные, вы можете попробовать что-то вроде этого:

 function array_rand_alternative($array){ return rand(0,count($array)-1); } 

Вы можете проверить эту функцию как:

 $a=[5,2,1,3]; for($i=0;$i<10;$i++) echo array_rand_alternative($a).","; 

Но все же я предлагаю вам использовать предопределенные функции, так как они хорошо тестируются разработчиками.