我想为冠军联赛进行我自己的四分之一决赛抽签(明天,3月16日星期五):我有两个问题:首先,模不起作用:它在数组中的每个条目后都显示"另一场比赛",而我希望每两场比赛(每2个条目)写一次。。。
第二个问题:是否有更好的方法来"打印"结果?就像一个没有索引的print_r,我可以说"在每个条目后添加'n
"?
<body>
<?php
$array = array("real", "barça", "bayern", "apoel", "chelsea", "milan", "benfica", "marseille" );
$new = array();
$incr = count($array);
while($incr>0){
$random = rand(0, count($array));
if (!in_array($array[$random], $new)){
$new[] = $array[$random];
if ( (count($new) % 2) ){
$new[] = " -- another match : ";
}
$incr--;
}
}
print_r($new);
?>
<p>results</p>
</body>
感谢您的帮助
另一种选择是打乱数组,然后弹出每个元素
$array = array("real", "barça", "bayern", "apoel", "chelsea", "milan", "benfica", "marseille" );
shuffle($array);
while($a = array_pop($array)) {
echo $a." vs. ".array_pop($array)." <br />";
}
样本输出:
apoel vs. real
barça vs. milan
marseille vs. bayern
chelsea vs. benfica
模运行良好:
- 数组开始为空
- 您可以向其中添加一个元素
- 长度是1,所以
1 % 2
,所以1
,所以truthy,所以将-- another match
添加到数组中 - 所以长度现在是2
- 循环的下一次迭代,将向数组中添加另一个元素
- 现在的长度是3,所以
3 % 2
,所以1
,所以是truthy,所以添加-- another match
等等。无论你想做什么,都不是你告诉服务器要做的。
你可能应该做的是这样的事情:
$array = Array(........);
while($a = array_shift($array)) {
$random = rand(0,count($array)-1); // -1 is important!
echo $a." vs. ".$array[$random]."<br />";
unset($array[$random)];
// no need to realign keys since array_shift already does that
}
模量正按照您的指示工作。
(计数($new)%2)){
when count($new) = 1, 1 % 2 = 1, = true
when count($new) = 2, 2 % 2 = 0, = false
when count($new) = 3, 3 % 2 = 1, = true
when count($new) = 4, 4 % 2 = 0, = false
when count($new) = 5, 5 % 2 = 1, = true
when count($new) = 6, 6 % 2 = 0, = false