Sdscompany.ru

Компьютерный журнал
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php заполнить массив случайными числами

Случайный выбор из массива в PHP

У меня уже спрашивали пару раз, как я делаю случайный вывод цитат у себя на сайте в блоке «Умные цитаты«. Далее мне удалось выяснить, что проблема здесь с непониманием людей, как вывести случайный элемент из массива в PHP. Задача простая, но тем не менее, раз возникают вопросы, то надо на них отвечать.

Сразу приведу код. Допустим, есть массив с набором цитат. И нужно выбрать одну случайную из них и вывести:

Ключевой момент — это получение случайного числа. Всё, что нужно сделать, это задать правильные границы. Если нужно выбрать на всей длине массива случайный элемент, то это от до (длины массива минус 1). А далее просто вытащить элемент из массива с полученным случайным индексом.

Что касается задачи с цитатами, то их лучше хранить в базе данных. В принципе, если сайт совсем простой, то можно и в текстовом файле. Но если в базе данных, то лучше использовать RAND() и LIMIT в SQL-запросе, чтобы Вы сразу получали единственную и случайную цитату из базы данных.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 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-2020 Русаков Михаил Юрьевич. Все права защищены.

    array_rand

    (PHP 4, PHP 5, PHP 7)

    array_rand — Выбирает один или несколько случайных ключей из массива

    Описание

    Выбирает одно или несколько случайных значений из массива. Возвращает ключ (или ключи) данных случайных элементов. Данная функция использует псевдослучайный генератор и не предназначена для использования в криптографических целях.

    Читать еще:  Структура языка php

    Список параметров

    Определяет количество выбираемых элементов.

    Возвращаемые значения

    Если вы выбираете только одно значение, функция array_rand() возвращает ключ, соответствующий этому значению. В обратном случае, она возвращает массив ключей, соответствующих случайным значениям. Это сделано для того, чтобы дать возможность выбрать из массива как случайные значения, так и случайные ключи. Попытка выбрать больше элементов, чем есть в массиве, сгенерирует ошибку уровня E_WARNING и вернет NULL.

    Список изменений

    Примеры

    Пример #1 Пример использования array_rand()

    Смотрите также

    User Contributed Notes 40 notes

    Note: array_rand uses the libc generator, which is slower and less-random than Mersenne Twister.

    This is a better alternative.

    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:

    Looks like this function has a strange randomness.

    If you take any number of elements in an array which has 40..100 elements, the 31st one is always by far the less occuring (by about 10% less than others).

    I tried this piece of code at home (PHP Version 5.3.2-1ubuntu4.9) and on my server (PHP Version 5.2.17), unfortunately i haven’t any server with the last version here :

    asort ( $proba );
    echo «Proba :
    n» ;
    foreach( $proba as $key => $value )
    <
    echo » $key : $value
    n» ;
    >
    ?>

    In every try, the number of occurrences change a bit but the 31 is always far less (around 2200) than the others (2400-2600). I tried with 50 and 100 elements, no change. I tried with more or less elements to pick (second parameter to array_rand), same result. If you pick only one element it’s even worse : 31 has half the result of the others.

    For this particular case, i recommend shuffling the array and taking the nth first elements, in this test it’s 60% faster and the statistics are ok.

    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 for getting random value from arrays;

    And example for getting random value from assoc arrays;

    «apple» , «b» => «banana» , «c» => «cherry» );
    print_r ( array_random_assoc ( $a ));
    print_r ( array_random_assoc ( $a , 2 ));
    ?>

    I agree with Sebmil (http://php.net/manual/en/function.array-rand.php#105265) that «array_rand()» produces weird and very uneven random distribution (as of my local PHP 5.3.8 and my public host’s PHP 5.2.17).
    Unfortunately, I haven’t got any access either to a server with the latest PHP version. My info is for those of you who like to check things for themselves and who don’t believe all of the official statements in the docs.
    I’ve made a simple adjustment of his test code like this:
    $v ) echo » $k :t $v
    n» ;
    ?>

    And it appears to me that simple «$idx=rand(0, count($test)-1);» is much better than «$idx=array_rand($test, 1);».
    And what’s more the simpler and a bit slower (0 ms up to total 712.357 ms at 5 mln cycles) «rand()» is better than «mt_rand()» in simple everyday use cases because it is more evenly distributed (difference least vs. most often numbers: ca. 0.20-1.28 % for «rand()» vs. ca. 1.43-1.68 % for «mt_rand()»).
    Try it for yourself. although it depends on your software and hardware configuration, range of numbers to choose from (due to random patterns), number of cycles in the loop, and temporary (public) server load as well.

    Получение случайных элементов с помощью PHP

    В этой статье описаны различные способы получения в PHP случайного числа , строк, паролей, изображений и т. д. Я использую эти методы для различных целей, а в этой статье хочу объединить информацию о них всех в одном месте.

    Получение случайного числа

    Этот метод полезен для добавления случайных чисел в файлы CSS и JavaScript :

    Это всего лишь один из возможных способов. Возвращаемое число будет принадлежать диапазону между двумя указанными числами.

    Получение случайной строки

    Если вам нужна PHP генерация случайного числа или буквенно-цифровой строки, попробуйте эту функцию:

    Этот код выдает случайную строку, состоящую из 10 символов. Можно изменить 10 на необходимое число. Альтернативная версия функции:

    Читать еще:  Html viewer как удалить

    Применение такое же, как и для предыдущей функции.

    Еще более случайная строка

    Этот метод похож на предыдущий, но в нем создается еще более случайная буквенно-цифровая строка с помощью генерации случайных чисел функцией srand() :

    Применение способа получения в PHP случайного числа из диапазона:

    Приведенный выше код выдает случайную строку, состоящую из 10 символов. Вы можете изменить 10 на нужное число.

    Случайная удобочитаемая строка

    В приведенном ниже примере мы генерируем случайную строку, которая включает в себя только буквы, чтобы сделать строку понятной:

    Этот код выдает случайную строку, состоящую из 10 символов. Можно изменить 10 на нужное число. Его также можно использовать, чтобы сгенерировать случайное число PHP .

    Получение случайных элементов из массива

    Есть много способов сделать это. Основная задача — вернуть из массива случайный набор элементов. Я использую приведенный ниже метод для отображения четырех случайных объявлений ( из массива, который включает в себя восемь объявлений ):

    Этот код выдает строку, содержащую четыре случайных элемента, разделенных пробелом. Можно задать любое число. Просто не забудьте, что оно должно быть меньше, чем общее количество элементов массива. Также можно настроить выходную строку по своему желанию.

    Случайные строки пароля

    Вот пример использования функций для генерации паролей на основе массива случайных чисел PHP :

    Существует множество способов генерации случайных паролей. Но этот позволяет контролировать надежность и длину пароля. Вот пример использования кода для получения в PHP случайного числа из диапазона :

    Получение известной случайной строки

    Я экспериментировал с простыми способами блокирования спама в создаваемом плагине чата и решил попробовать использовать поле Ajax nonce . Вот код, который я использовал для генерации nonce ( скрытый ввод ):

    Затем при обработке запроса Ajax я могу проверить пользователя, сверив представленное значение nonce с известным набором $nonces .

    Обратите внимание, что этот PHP генератор случайных чисел не рекомендуется для применения на рабочих сайтах. Я рассмотрел его только потому, что он соответствует теме статьи, и может помочь в разработке различных идей тем, кто работает над подобными проектами.

    Данная публикация представляет собой перевод статьи « Get Random with PHP » , подготовленной дружной командой проекта Интернет-технологии.ру

    массив случайных чисел

    Задача для начинающих №7

    Forums:

    • Read more about Задача для начинающих №7
    • 1 comment
    • Log in to post comments
    • 481 reads

    Учебные задачи PHP. Задача 14

    Forums:

    Решение для задачи из списка

    • Read more about Учебные задачи PHP. Задача 14
    • 12 comments
    • Log in to post comments
    • 1112 reads

    Задача 12: сравнение элементов массивов

    Forums:

    Задача 12 из этого сборника.

    Даны два массива по 20 элементов каждый (заполните случайными числами, так чтобы среди элементов массива при очередном запуске программы могли встретиться и отрицательные и положительные числа).
    Сравните каждый 3-ий элемент 1-ого массива с каждый 2-ым элементов 2-ого массива — сравнение проводите пока не закончится та выборка, которая короче.

    • Read more about Задача 12: сравнение элементов массивов
    • Log in to post comments
    • 704 reads

    Задача 9: выводим массив случайных чисел «елочкой»

    Forums:

    Задача 9 из этого списка задач.

    Задайте случайным образом массив из N элементов. Выведите его на экран «ёлочкой».

    • Read more about Задача 9: выводим массив случайных чисел «елочкой»
    • 4 comments
    • Log in to post comments
    • 2056 reads

    Задача 8: создание массива MxN элементов

    Forums:

    Задать двумерный массив размерностью m на n (MxN) элементов (m и n вынести в область определения констант), заполнить его случайными значениями и вывести их на экран уже после того, как весь массив будет заполнен (т.е. заполнять и выводить в разных группах циклов).

    Из этого списка задач.

    • Read more about Задача 8: создание массива MxN элементов
    • 2 comments
    • Log in to post comments
    • 1549 reads

    Задача 7: массив из семи случайных чисел

    Forums:

    Задача 7 из этого списка задач.

    Задать массив из 7-ми элементов через предварительное описание типа, заполнить его случайными значениями в одном цикле, а в другом цикле вывести эти значения на экран.

    Заполнение массива случайными числами

    В настоящее время я пытаюсь заполнить массив размера num случайными значениями. Для этого мне нужно создать две функции:

    1: напишите функцию (*createdata), которая выделяет динамический массив num double значений, инициализируя значения до 0.0.

    2: Напишите другую функцию (gendata), которая будет заполнять массив двойных значений случайными значениями, генерируемыми с помощью функции rand().

    Читать еще:  Скачать inspect and edit html

    Вот моя попытка написать, как работают функции (за пределами main() ) :

    Однако я знаю, что есть что-то определенно неправильное в вышеприведенном.

    Мне бы хотелось, чтобы после того, как я вызвал обе функции в main, я сгенерировал массив размера num , который заполнен случайными числами.

    4 Ответов

    Вы должны передать выделенный указатель на функцию gendata , потому что в ее текущей форме ptr неизвестно. Это вообще компилируется?

    Также обратите внимание, что я снова проверяю возврат NULL из malloc .

    Другие намеки другие могли бы сказать здесь:

    • Не бросайте возвращение malloc .
    • Не забудьте free указатель после того, как вы используете его полностью.
    • Вы ничего не возвращаете в своей функции gendata , но вы объявили ее как double . Используйте вместо этого void , если вы не собираетесь ничего возвращать.

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

    EDIT: так вот, это было бы так, в качестве примера:

    В createdata() вы забыли фактически вернуть указатель на вновь выделенный массив в конце:

    Кроме того, ваша функция gendata() должна работать с уже существующим массивом, а не создавать свой собственный. Вы должны добавить его в качестве аргумента. Кроме того, ему не нужно ничего возвращать. Так:

    Однако вы можете упростить вышесказанное и уменьшить уровень вложенности:

    Обратите внимание , что double ptr[] фактически означает то же самое, что и double* ptr , но синтаксис [] делает более очевидным, что функция хочет получить указатель на массив двойников, а не указатель на один double .

    Итак, теперь для того, чтобы создать массив и затем рандомизировать его, вы должны сделать:

    Вам нужно вернуть массив, выделенный в функции createdata(), иначе вы не сможете использовать его в функции gendata() или где-либо еще.

    Я также не знаю, почему gendata() объявляется возвращением двойника.

    Ну, я не совсем знаком с тем, как работает malloc, хотя похоже, что это будет работать нормально, поэтому я не могу оценить это, но единственные проблемы, которые я вижу здесь, это:

    Вы не возвращаете ptr в своей функции createdata . Поэтому, когда вы пытаетесь получить доступ к ptr в своей функции gendata , в области видимости нет массива ptr . Это даст вам ошибку. Кроме того, функция gendata даже ничего не возвращает.

    Посмотрите на этот код, это должно сработать:

    Я верю, что это сработает, вот пример его использования:

    Похожие вопросы:

    Я хочу заполнить свой массив уникальными случайными числами между 0-9 в c# Я пробую эту функцию: IEnumerable UniqueRandom(int minInclusive, int maxInclusive) < List candidates.

    Я хочу инициализировать многомерный массив со случайными числами от 0 до 100 (включительно). Я могу создать многомерный массив с пустыми значениями в каждом поле, а затем добавить 100 случайных.

    Как заполнить столбец int, в настоящее время пустой, случайными числами без дубликатов?

    Мне нужно обновить таблицу со случайными числами, это моя таблица: chr pos ref alt id_disease chr1 123 A A NULL chr2 456 A T NULL Я хочу обновить столбец болезни со случайными числами от 1 до.

    Хорошо, я знаю, что есть несколько сообщений, подобных этому, но мне нужно использовать только циклы (for, do, while) и if, else для заполнения массива случайными, но уникальными числами, так как я.

    Я работаю с Excel 2013 и мне нужно заполнить диапазон ячеек случайными числами. Точнее, диапазон(B1:B4) заполняют числами для того, чтобы значение ячеек в предыдущем столбце, я имею в виду в.

    Здравствуйте, я пытаюсь заполнить свой массив случайными числами от 1 до 50 с помощью указателя. Когда я пытаюсь сделать это, программа падает. Это и есть декларация. populate(arraySize, numArray);.

    Возможный Дубликат : заполнение массива случайными числами uniqe от 0-9 до c# У меня есть массив типа page[100], и я хочу заполнить его случайными числами между 0-9 и c#. как я могу это сделать? я.

    Мне нужно создать массив с помощью конструктора, добавить метод для печати массива в виде последовательности и метод для заполнения массива случайными числами типа double. Вот что я сделал до сих.

    Мне нужно создать массив из SIZE целых чисел, заполнить массив случайными числами, а затем отобразить несортированное и отсортированное содержимое массива. Вот что я получил до сих пор: #include.

    Ссылка на основную публикацию
    Adblock
    detector