Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Выбор произвольного числа случайных значений
Форумы портала PHP.SU » PHP » Пользовательские функции » Выбор произвольного числа случайных значений

Страниц (1): [1]
 

1. EuGen - 03 Июня, 2013 - 13:15:42 - перейти к сообщению
Приветствую,

Итак, очень часто у посетителей возникает задача выбора одного или нескольких случайных значений из массива. Как это сделать? Очень просто. В php для этого существует функция array_rand - вокруг неё можно строить желаемые решения. Как, например, это:
PHP:
скопировать код в буфер обмена
  1. function array_rand_values($rgData, $iCount=1, $bAllowRepeats=false)
  2. {
  3.    if(!is_array($rgData) || !is_int($iCount) || $iCount<1)
  4.    {
  5.       return null;
  6.    }
  7.    if($bAllowRepeats)
  8.    {
  9.       return array_map(function($mTemp) use ($rgData)
  10.       {
  11.          return $rgData[array_rand($rgData)];
  12.       }, array_fill(0, $iCount, 0));
  13.    }
  14.    else
  15.    {
  16.       if($iCount>count($rgData))
  17.       {
  18.          return null;
  19.       }
  20.       return array_intersect_key($rgData, array_flip(array_rand($rgData, $iCount)));
  21.    }
  22. }

- это далеко не единственная возможная реализация, однако она учитывает большинство требуемых аспектов.
Принимает три параметра: массив $rgData, из которого требуется сделать выборку, количество значений $iCount и флаг допустимости повторений $bAllowRepeats. По-умолчанию повторения не допускаются. В случае, если число запрашиваемых значений больше их количества в массиве, будет возвращён null при условии запрета повторений.

 

Powered by ExBB FM 1.0 RC1