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






Вот идея, где вы можете случайным образом выбрать элемент из каждого массива в зависимости от того, из какого массива выбрать (также случайным образом, в соответствии с вашим образцом кода):
<?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 отправляется только число.
Ваш код PHP недействителен по ряду причин. Это должен быть псевдокод или вы пытаетесь написать код, который действительно скомпилируется? Синтаксис оператора if отключен, и эти операторы двойной стрелки
=>не будут работать в условном операторе. Я предполагаю, что вы имеете в виду>=больше или равно.