我几乎是一个 PHP 初学者,尽管我可以像其他人一样复制和粘贴,而且通常我可以将它分开并弄清楚发生了什么:) 这是我在这里的第一篇文章,但我得到了很多其他答案的帮助,所以感谢所有过去和希望未来的帮助!
基本上我在这里试图复制的是一个马术障碍赛,其中每次击倒一个杆子等于四个错误,并且超过允许的时间给出时间错误。所有跳得干净的马,即零失误的马,都会进入跳线回合,在那里他们可能会或可能不会出现错误。
我当前的问题是使用 for 和 foreach 循环来推进两个不同的数组。我遇到的问题是,如果我让一个阵列工作,另一个就会停止。其中一个数组需要打乱,另一个需要按数字顺序排序。基本上它是一个随机化器,它将获取一系列马匹并给它们放置位置,然后分配一个权重随机数的错误(这是用于马游戏,书呆子,我知道)。这是我正在使用的代码:
索引.php
<form action="classes.php" method="post">
How many classes do you wish to randomize?<br />
<input type="text" name="number"><br />
<input type="submit" /><br />
</form>
类.php
<form action="action.php" method="post">
<?php
$number = $_POST['number']; //This is the desired value of Looping
echo '<input type="hidden" value="' . $number . '" name="number">';
$i = 1; //First we set the count to be zero
while ($i<=$number) {
echo '
Class: <input type="text" name="class' . $i . '"><br />
<textarea cols="100" rows="20" name="entries' . $i . '"></textarea><br />
<br />';
$i++; //Increase the value of the count by 1
};
?>
<input type="submit" /><br />
</form>
动作.php
$number = $_POST['number']; //This is the desired value of Looping
function array_rand_weighted($values) {
$r = mt_rand(1, array_sum($values));
foreach ($values as $item => $weight) {
if ($r <= $weight) return $item;
$r -= $weight;
}
}
for ($i=1; $i<=$number; $i++) {
$class[$i] = $_POST['class'.$i];
//trim off excess whitespace off the whole
$text[$i] = trim($_POST['entries'.$i]);
//explode all separate lines into an array
$textAr[$i] = explode("\n", $text[$i]);
//trim all lines contained in the array.
$textAr[$i] = array_filter($textAr[$i], 'trim');
//shuffle the results
shuffle($textAr[$i]);
//add faults
//loop through the lines
echo '<div id="output">
[b]' . $class[$i] . '[/b]<br />';
foreach($textAr[$i] as $key[$i]=>$line[$i]){
$knockdowns = array( 0 => 20, 1 => 25, 2 => 30, 3 => 10, 4 => 8, 5 => 7); // knockdowns
$knockdowns = array_rand_weighted($knockdowns)*4;
$timefaults = array( 0 => 75, 1 => 10, 2 => 10, 3 => 5); // time faults
$timefaults = array_rand_weighted($timefaults);
$faultsadded = $knockdowns + $timefaults;
$faults[$i] = $faultsadded;
}
asort($faults);
foreach($textAr[$i] as $key[$i]=>$line[$i]){
echo $key + 1,". " . $line . " (" . $faults[$i] . " Faults)<br />";
}
echo '</div>';
}
目前,这段代码正在产生我需要的随机结果,但不是错误。当我能够让它产生全套故障时,随机马的列表停止运行。我从来没有能够按价值顺序(0-20+)对故障进行排序。我使用 array_combine 找到了另一个答案,并认为也许可以使用它,但我需要密钥(我想 - 也许我真的不需要?)。
如果你想看到它的实际效果,这里是链接:http ://www.eecreates.com/randomizer/dhjc%20randomizer/它是一个多类随机化器,所以在第一页你输入你想要的类数随机化,然后在下一页输入班级名称和输入的马匹。
我要的最终产品看起来像这样:
表演跳跃班
- 一分钱(0 个错误 | 0 个错误)
- 谢尔顿(0 个故障 | 4 个故障)
- raj (4 个错误)
- 伦纳德(5个错误)
- 霍华德(8个错误)
- 艾米·法拉·福勒 (8 个错误)
- 伯纳黛特(9 个错误)
我还希望它为那些一开始为零的马展示第二组错误,但当然一次只有一件事。:) 谢谢!