php模块和结果的print_r


php modulo and print_r of the result?

我想为冠军联赛进行我自己的四分之一决赛抽签(明天,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