Как случайным образом генерировать объекты из нескольких массивов с пользовательским вводом в PHP?

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

<form action='random.php' method='POST' id='random'>
   <table class='table table-responsive'>
     <tr>
        <td>Number of items: </td>
        <td><input type='text' name='randitem'></td>
        <td><button type = "submit"Generate</button>
        </td>
     </tr>
   </table>
<?php

$roll = rand(1, 100);

    if $roll < 50

        $commonItem = array(citem1, citem2, citem3);

    if $roll => 50 and < 95

        $uncommonItem = array(uitem1, uitem2, uitem3);

    if $roll => 95

        $rareItem = array(ritem1, ritem2, ritem3);
?>

Ваш код PHP недействителен по ряду причин. Это должен быть псевдокод или вы пытаетесь написать код, который действительно скомпилируется? Синтаксис оператора if отключен, и эти операторы двойной стрелки => не будут работать в условном операторе. Я предполагаю, что вы имеете в виду >= больше или равно.

tshimkus 06.02.2019 06:52

Это псевдокод. Например, цель состоит в том, чтобы пользователь ввел количество элементов, которые необходимо сгенерировать. Допустим, пользователь вводит 3. Он нажимает «Создать». Получаются три процента. Если генерируется от 1 до 50 процентов, то элемент из общего списка выбирается случайным образом. Если процент от 51 до 94, то элемент из списка необычных выбирается случайным образом. Если процент от 95 до 100, то предмет из списка редких выбирается случайным образом. Затем результаты 3 элементов отображаются пользователю.

CJSolo 07.02.2019 01:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
184
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

<?php
    $commonItems = array('citem1', 'citem2', 'citem3');
    $uncommonItems = array('uitem1', 'uitem2', 'uitem3');
    $rareItems = array('ritem1', 'ritem2', 'ritem3');
    $roll = rand(1,100);

    if ($roll < 50) {

         $size = count($commonItems) - 1;
         $index = rand(0,$size); 
         $item = $commonItems[$index];

    } elseif ($roll >= 50 && $roll < 95) {

         $size = count($uncommonItems) - 1;
         $index = rand(0,$size); 
         $item = $uncommonItems[$index];

    } else {

         $size = count($rareItems) - 1;
         $index = rand(0,$size); 
         $item = $rareItems[$index];

    }

    echo $item;
?>

Вот рефакторинговая версия с функцией, которая обрабатывает повторяющиеся функции в операторах if:

<?php
    $commonItems = array('citem1', 'citem2', 'citem3');
    $uncommonItems = array('uitem1', 'uitem2', 'uitem3');
    $rareItems = array('ritem1', 'ritem2', 'ritem3');

    function getItem($itemArray) {    
         $size = count($itemArray) - 1;
         $index = rand(0,$size); 
         return $itemArray[$index];    
    }

    $roll = rand(1,100);
    if ($roll < 50) {
        $item = getItem[$commonItems];
    } elseif ($roll >= 50 && $roll < 95) {
        $item = getItem[$uncommonItems];
    } else {
        $item = getItem[$rareItems];
    }

    echo $item;
?>

Обновлено: я пропустил часть о том, как вы вводите ряд элементов, так что вот что

    // Check to see if form was submitted with something in randitem
    if (isset($_POST['randitem'])) {

        $commonItems = array('citem1', 'citem2', 'citem3');
        $uncommonItems = array('uitem1', 'uitem2', 'uitem3');
        $rareItems = array('ritem1', 'ritem2', 'ritem3');

        function getItem($itemArray) {    
            $size = count($itemArray) - 1;
            $index = rand(0,$size); 
            return $itemArray[$index];    
        }

        // loop number of times set in form
        foreach ($i = 0; $i < $_POST['randitem']; $i++) {

            $roll = rand(1,100);
            if ($roll < 50) {
                $item = getItem[$commonItems];
            } elseif ($roll >= 50 && $roll < 95) {
                $item = getItem[$uncommonItems];
            } else {
                $item = getItem[$rareItems];
            }

            echo $item . "<br>"; // will print each item on its own line
        }
    }
?>

Примечание. Это ничего не даст, если форма отправлена ​​без числа, поэтому рассмотрите возможность изменения типа ввода на «число» или выполнения какой-либо другой проверки формы, чтобы убедиться, что в PHP отправляется только число.

Другие вопросы по теме