- Случайный выбор из массива в PHP
- Комментарии ( 20 ):
- array_rand
- Описание
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- Смотрите также
- User Contributed Notes 5 notes
- C Sharp/C# — Рандомное заполнение массива
- Рандомное заполнение массива на C Sharp/C#
- В итоге:
- Pascal: Занятие № 5. Одномерные массивы в Паскале
- Одномерные массивы в Паскале
- Объявление массива
- Инициализация массива
- Вывод элементов массива
- Функция Random в Pascal
- Числа Фибоначчи в Паскале
- Максимальный (минимальный) элемент массива
- Поиск в массиве
- Циклический сдвиг
- Перестановка элементов в массиве
- Выбор элементов и сохранение в другой массив
- Сортировка элементов массива
- admin
- Bronislav
- Владимир
- Aurangzeb
Случайный выбор из массива в PHP
У меня уже спрашивали пару раз, как я делаю случайный вывод цитат у себя на сайте в блоке «Умные цитаты«. Далее мне удалось выяснить, что проблема здесь с непониманием людей, как вывести случайный элемент из массива в PHP. Задача простая, но тем не менее, раз возникают вопросы, то надо на них отвечать.
Сразу приведу код. Допустим, есть массив с набором цитат. И нужно выбрать одну случайную из них и вывести:
Ключевой момент — это получение случайного числа. Всё, что нужно сделать, это задать правильные границы. Если нужно выбрать на всей длине массива случайный элемент, то это от 0 до (длины массива минус 1). А далее просто вытащить элемент из массива с полученным случайным индексом.
Что касается задачи с цитатами, то их лучше хранить в базе данных. В принципе, если сайт совсем простой, то можно и в текстовом файле. Но если в базе данных, то лучше использовать RAND() и LIMIT в SQL-запросе, чтобы Вы сразу получали единственную и случайную цитату из базы данных.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 20 ):
Я правильно понимаю? $res = $mysqli->query(«SELECT `text` FROM `citata` ORDER BY RAND() LIMIT 1»); $arr = $res->fetch_assoc(); echo $arr[‘text’];
Да, всё правильно.
Я не могу понять, а зачем от count($quotes) отнимать 1? Ведь тогда получается, что номер самой последней цитаты мы не принимаем в счет.
Не рекомендовал бы использовать ORDER BY RAND(), это немного тормозит сайт. Данная функция ускорит данный запрос: function getCitata()< $mysqli = conectDB(); $offset_result = $mysqli->query(«SELECT MIN(`id`) AS min, MAX(`id`) AS max FROM citata»); $offset_row = mysqli_fetch_object($offset_result); $RID = mt_rand($offset_row->min,$offset_row->max); $res_ad = $mysqli->query(«SELECT text FROM citata WHERE id >= «.$RID.» LIMIT 1″); $row_ad = $res_ad->fetch_assoc(); closeDB($mysqli); echo $row_ad[‘text’]; >
Подскажите куда надо вставлять это код? И еще можно ли сделать что бы при нажатие кнопки текст менялся, если да то напишите))) p.s. Можно по подробней только) спс.
Вопрос некорректный, рекомендую посмотреть вот этот курс: http://srs.myrusakov.ru/freephp
У меня мобильный интернет и я не могу скачать видео урок( а в youtube есть видео урок?
В youtube нет, но с мобильным Интернетом и там не удастся посмотреть.
А это можно сделать при помощи HTML или JS?
В JS да, только хранить цитаты надо будет прямо в исходном коде страницы.
Можете привести скрипт?
Там есть функция Math.random(), вот её и используйте. А с массивом Вы обязаны уметь работать, а если не умеете, то тогда изучайте JS с нуля.
Михаил, напишите пожалуйста статью а лучше скрипт полной статистики сайта на PHP и MySQL, я вас очень прошу
Постараюсь что-нибудь придумать, хотя идеальную статистику невозможно написать.
Михаил, если такой проект у Вас будет, дадите ссылку.)
Михаил, а нужно делать unset для массива? после вывода?
Если он не нужен больше, то можно, хотя никто это не делает, а если потребуется, то нет.
смотрите, я правильно поняла? то есть в данном случае получается такой код:
А чем Вам не нравится array_shuffle()? Перемешали массив, выбрали нулевой элемент.
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
Источник
array_rand
(PHP 4, PHP 5, PHP 7, PHP 8)
array_rand — Выбирает один или несколько случайных ключей из массива
Описание
Выбирает одно или несколько случайных значений из массива. Возвращает ключ (или ключи) данных случайных элементов. Данная функция использует псевдослучайный генератор и не предназначена для использования в криптографических целях.
Список параметров
Определяет количество выбираемых элементов.
Возвращаемые значения
Если вы выбираете только одно значение, функция array_rand() возвращает ключ, соответствующий этому значению. В обратном случае, она возвращает массив ключей, соответствующих случайным значениям. Это сделано для того, чтобы дать возможность выбрать из массива как случайные значения, так и случайные ключи. Если возвращается несколько ключей, они будут возвращены в том порядке, в котором они присутствовали в исходном массиве. Попытка выбрать больше элементов, чем есть в массиве, сгенерирует ошибку уровня E_WARNING и вернёт NULL.
Список изменений
Версия | Описание |
---|---|
7.1.0 | Внутренний алгоритм получения случайных чисел изменён с функции rand библиотеки libc на генератор на базе » Вихря Мерсенна. |
Примеры
Пример #1 Пример использования array_rand()
Смотрите также
User Contributed Notes 5 notes
If the array elements are unique, and are all integers or strings, here is a simple way to pick $n random *values* (not keys) from an array $array:
( array_flip ( $array ), $n ); ?>
/**
* Wraps array_rand call with additional checks
*
* TLDR; not so radom as you’d wish.
*
* NOTICE: the closer you get to the input arrays length, for the n parameter, the output gets less random.
* e.g.: array_random($a, count($a)) == $a will yield true
* This, most certainly, has to do with the method used for making the array random (see other comments).
*
* @throws OutOfBoundsException – if n less than one or exceeds size of input array
*
* @param array $array – array to randomize
* @param int $n – how many elements to return
* @return array
*/
function array_random (array $array , int $n = 1 ): array
<
if ( $n 1 || $n > count ( $array )) <
throw new OutOfBoundsException ();
>
return ( $n !== 1 )
? array_values ( array_intersect_key ( $array , array_flip ( array_rand ( $array , $n ))))
: array( $array [ array_rand ( $array )]);
>
// An example how to fetch multiple values from array_rand
$a = [ ‘a’ , ‘b’ , ‘c’ , ‘d’ , ‘e’ , ‘f’ , ‘g’ ];
$n = 3 ;
// If you want to fetch multiple values you can try this:
print_r ( array_intersect_key ( $a , array_flip ( array_rand ( $a , $n ) ) ) );
// If you want to re-index keys wrap the call in ‘array_values’:
print_r ( array_values ( array_intersect_key ( $a , array_flip ( array_rand ( $a , $n ) ) ) ) );
array_rand () takes a random value without ever being able to go back in its choice of random value.
A simple example:
I decide to mix an array of 10 entries to retrieve 3 values. This choice will give increasing and random values.
$pm = array_rand($myarray,3);
// $pm return array(0->0,1->6,2->8)
But if I decide to shuffle an array of 10 entries to get 10 entries, array_rand () will choose to assign a value to each return value and therefore the return array will not be random.
$gm = array_rand($myarray,count($myarray));
// $gm not random array(0->0,1->1,2->2,3->3,4->4,5->5,6->6,7->7,8->8,9->9)
The easiest way to have a truly random value:
either use array_rand () in a loop of 1 value at a time
$deg = range(-60,60);
$size = range(16,64);
$color = [«blue»,»red»,»green»,»pink»,»orange»,»purple»,»grey»,»darkgreen»,»darkkhaki»];
$i = 0;
$longueur = 10;
do <
++$i;
printf(» %s «,
$deg[array_rand($deg)],
$size[array_rand($size)],
$color[array_rand($color)],
$alnum[array_rand($alnum)]);
Источник
C Sharp/C# — Рандомное заполнение массива
Всем привет. Сегодня немножко поработаем с массивами. Научимся объявлять и работать с ними. О сложной теории относительно внутренностей массива мы говорить не будем. Если вкратце — массив, это набор элементов, к каждому из которых можно обратиться по индексу. Массивы позволяют вам вместо объявления нескольких переменных, создать всего одну. Перейдем к основному вопросу. Сегодня мы попробуем реализовать рандомное заполнение массива на C#.
Рандомное заполнение массива на C Sharp/C#
Итак, прежде чем заполнять массив рандомными числами, необходимо объявить массив. Сделать это достаточно просто:
Таким образом мы объявили массив элементов типа int (целочисленное) с именем myArray содержащий в себе 5 элементов. Клише любой статьи про массивы: помните, первый элемент массива доступен по индексу 0.
Итак. Теперь необходимо объявить рандомный метод, который находится в библиотеке System.Random. Если в дальнейшем вы будете использовать еще какие-то методы, то в самом верху вашего кода напишите using System. Если нет, то достаточно прописать using System.Random. Метод объявляем следующим образом:
Отлично. Теперь мы немного затронем тему работы с циклами, так как необходимо заполнить первый и последующий элемент массива. Пишем именно так, чтобы нашим читателям было понятно, как работают циклы. Следующий код проведет рандомное заполнение массива:
Последняя строка выведет каждый элемент массива в консоль. Обратите внимание на эту часть: rand.Next(20); Здесь мы указываем, что максимально возможное значение любого элемента массива не может быть больше цифры 20.
При запуске программы получаем следующий аутпут:
К каждому из элементов можно прилепить описание индекса к примеру. При чем не нужно это делать отдельно для каждого элемента, а достаточно изменить код следующим образом:
В результате мы получим следующий красивые и понятный вывод:
Обратите внимание, что последний индекс массива равен 4, а элементов всего 5. В целом в выводе явно указано, что первый элемент массива находится под индексом 0.
В итоге:
Массивы бывают разных типов и в них можно хранить различные типы данных. Соответственно их рационально использовать, когда появляется необходимость хранить статичные переменные. То есть вы можете заполнить массив определенными данными, строками, битами и т.д. В целом на проектах более высокого класса используются в основном базы данных, в проектах чуть поменьше локальные матрицы. Но даже при получении например списка товаров, используется массив типа List , где Item это одна позиция из базы данных. В любом случае вам решать как использовать массивы. В дальнейших статьях мы обязательно будем их использовать в качестве обучающих материалов. Будем менять в них данные, агрегировать с этими данными, заполнять массив определенными элементами и, конечно, будем создавать более сложные двумерные и разнотипные массивы.
Надеемся, что данная статья была для вас полезной! Самой большой наградой для нас будет подписка на нашу группу в ВК и youtube канал!
Источник
Pascal: Занятие № 5. Одномерные массивы в Паскале
Одномерные массивы в Паскале
Объявление массива
Массивы в Паскале используются двух типов: одномерные и двумерные.
Определение одномерного массива в Паскале звучит так: одномерный массив — это определенное количество элементов, относящихся к одному и тому же типу данных, которые имеют одно имя, и каждый элемент имеет свой индекс — порядковый номер.
Описание массива в Паскале (объявление) и обращение к его элементам происходит следующим образом:
var dlina: array [1..3] of integer; begin dlina[1]:=500; dlina[2]:=400; dlina[3]:=150; .
Объявить размер можно через константу:
Инициализация массива
Кроме того, массив может быть сам константным, т.е. все его элементы в программе заранее определены. Описание такого массива выглядит следующим образом:
const a:array[1..4] of integer = (1, 3, 2, 5);
Заполнение последовательными числами:
var a: array of integer; var n:=readInteger; a:=new integer[n];
var a: array of integer; var n:=readInteger; SetLength(a,n); // устанавливаем размер
begin var a: array of integer; a := new integer[3]; a[0] := 5; a[1] := 2; a[2] := 3; end.
или в одну строку:
begin var a: array of integer; a := new integer[3](5,2,3); print(a) end.
Ввод с клавиатуры:
writeln (‘введите кол-во элементов: ‘); readln(n); <если кол-во заранее не известно, - запрашиваем его>for i := 1 to n do begin write(‘a[‘, i, ‘]=’); read(a[i]); . end; .
✍ Пример результата:
var a:=ReadArrInteger(5); // целые var a:=ReadArrReal(5); // вещественные
Вывод элементов массива
var a: array[1..5] of integer; <массив из пяти элементов>i: integer; begin a[1]:=2; a[2]:=4; a[3]:=8; a[4]:=6; a[5]:=3; writeln(‘Массив A:’); for i := 1 to 5 do write(a[i]:2); <вывод элементов массива>end.
Для работы с массивами чаще всего используется в Паскале цикл for с параметром, так как обычно известно, сколько элементов в массиве, и можно использовать счетчик цикла в качестве индексов элементов.
[Название файла: taskArray0.pas ]
В данном примере работы с одномерным массивом есть явное неудобство: присваивание значений элементам.
for var i:=0 to a.Length-1 do a[i] += 1;
Проход по элементам (только для чтения):
Пример:
foreach var x in a do Print(x)
Функция Random в Pascal
Для того чтобы постоянно не запрашивать значения элементов массива используется генератор случайных чисел в Паскаль, который реализуется функцией Random . На самом деле генерируются псевдослучайные числа, но суть не в этом.
Диапазон в Паскале тех самых случайных чисел от a до b задается формулой:
var f: array[1..10] of integer; i:integer; begin randomize; for i:=1 to 10 do begin f[i]:=random(10); < интервал [0,9] >write(f[i],’ ‘); end; end.
Для вещественных чисел в интервале [0,1]:
var x: real; . x := random(0.0,1.0);;
или с дополнительными параметрами (диапазон [5;15]):
[Название файла: taskArray1.pas ]
Числа Фибоначчи в Паскале
Наиболее распространенным примером работы с массивом является вывод ряда чисел Фибоначчи в Паскаль. Рассмотрим его.
Получили формулу элементов ряда.
var i:integer; f:array[0..19]of integer; begin f[0]:=1; f[1]:=1; for i:=2 to 19 do begin f[i]:=f[i-1]+f[i-2]; writeln(f[i]) end; end.
На данном примере, становится понятен принцип работы с числовыми рядами. Обычно, для вывода числового ряда находится формула определения каждого элемента данного ряда. Так, в случае с числами Фибоначчи, эта формула-правило выглядит как f[i]:=f[i-1]+f[i-2] . Поэтому ее необходимо использовать в цикле for при формировании элементов массива.
[Название файла: taskArray2.pas ]
Максимальный (минимальный) элемент массива
Псевдокод:
Поиск максимального элемента по его индексу:
// … var (min, minind) := (a[0], 0); for var i:=1 to a.Length-1 do if a[i]
[Название файла: taskArray_min.pas ]
[Название файла: taskArray4.pas ]
[Название файла: taskArray5.pas ]
[Название файла: taskArray6.pas ]
Пример:
[Название файла: taskArray7.pas ]
Поиск в массиве
Рассмотрим сложный пример работы с одномерными массивами:
Для решения поставленной задачи понадобится оператор break — выход из цикла.
Решение Вариант 1. Цикл for:
var f: array[1..10] of integer; flag:boolean; i,c:integer; begin randomize; for i:=1 to 10 do begin f[i]:=random(10); write(f[i],’ ‘); end; flag:=false; writeln(‘введите образец’); readln(c); for i:=1 to 10 do if f[i]=c then begin writeln(‘найден’); flag:=true; break; end; if flag=false then writeln(‘не найден’); end.
begin var a := new integer[10]; a := arrRandomInteger(5,0,5); //[1,3,5,4,5] print(a.IndexOf(3)) // 1 end.
или метод a.Contains(x) наравне с x in a :
begin var a := new integer[10]; a := arrRandomInteger(5,0,5); //[1,3,5,4,5] print(a.Contains(3)); // True print(3 in a)// True end.
Рассмотрим эффективное решение:
Задача: найти в массиве элемент, равный X , или установить, что его нет.
Алгоритм:
- начать с 1-го элемента ( i:=1 );
- если очередной элемент ( A[i] ) равен X , то закончить поиск иначе перейти к следующему элементу.
решение на Паскале Вариант 2. Цикл While:
Поиск элемента в массиве
Предлагаем посмотреть подробный видео разбор поиска элемента в массиве (эффективный алгоритм):
Пример:
[Название файла: taskArray8.pas ]
Циклический сдвиг
Решение:
Программа:
// … var v := a[0]; for var i:=0 to a.Length-2 do a[i] := a[i+1]; a[a.Length-1] := v;
// … var v := a[a.Length-1]; for var i:=a.Length-1 downto 1 do a[i] := a[i-1]; a[0] := v;
[Название файла: taskArray9.pas ]
Перестановка элементов в массиве
Рассмотрим, как происходит перестановка или реверс массива.
Решение:
Псевдокод:
Программа:
begin var a: array of integer := (1,3,5,7); var n := a.Length; for var i:=0 to n div 2 — 1 do Swap(a[i],a[n-i-1]); End.
Решение 2 (стандартная процедура Reverse() ):
begin var a:=new integer[10]; a:=arrRandomInteger(10); print(a);// [41,81,84,63,12,26,88,25,36,72] Reverse(a); print(a) //[72,36,25,88,26,12,63,84,81,41] end.
[Название файла: taskArray10.pas ]
Выбор элементов и сохранение в другой массив
Решение:
Вывод массива B:
writeln(‘Выбранные элементы’); for i:=1 to count-1 do write(B[i], ‘ ‘)
// . for var i := 0 to a.length — 1 do if a[i]
[Название файла: taskArray11.pas ]
Сортировка элементов массива
- В таком типе сортировок массив представляется в виде воды, маленькие элементы — пузырьки в воде, которые всплывают наверх (самые легкие).
- При первой итерации цикла элементы массива попарно сравниваются между собой:предпоследний с последним, пред предпоследний с предпоследним и т.д. Если предшествующий элемент оказывается больше последующего, то производится их обмен.
- При второй итерации цикла нет надобности сравнивать последний элемент с предпоследним. Последний элемент уже стоит на своем месте, он самый большой. Значит, число сравнений будет на одно меньше. То же самое касается каждой последующей итерации.
Pascal | PascalABC.NET |
Pascal | PascalABC.NET |