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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Выбор произвольного числа случайных значений

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Ответ на многократно поднимавшийся вопрос
EuGen Администратор
Отправлено: 03 Июня, 2013 - 13:15:42
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Приветствую,

Итак, очень часто у посетителей возникает задача выбора одного или нескольких случайных значений из массива. Как это сделать? Очень просто. В 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 при условии запрета повторений.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB