for ($i=1; $i < 10; $i++) {
$a = rand(1,6);
$b = rand(1,6);
if ($a != $b) {
$mysqli->query("UPDATE 'jpa' SET 'war' = $b WHERE 'id' = $a");
$mysqli->query("UPDATE 'jpa' SET 'war' = $a WHERE 'id' = $b");
}
}
Необходимо составить таблицу противников. Когда они выполняются, получаются те же результаты, как этого можно избежать?
Начните с массива идентификаторов.
$ids = [1, 2, 3, 4, 5, 6];
перетасовывать их
shuffle($ids);
затем разделить на куски 2 и повторить их, сделав ваши обновления.
foreach (array_chunk($ids, 2) as $opponents) {
if (count($opponents) == 2) { // check this in case you have odd numbers of ids
list($a, $b) = $opponents;
$mysqli->query("UPDATE 'jpa' SET 'war' = $b WHERE 'id' = $a");
$mysqli->query("UPDATE 'jpa' SET 'war' = $a WHERE 'id' = $b");
}
}
shuffle($ids)
должен позаботиться об этом, если только я вас не понял.
здесь другой подход, который я опубликую только потому, что я попробовал, и он работает. Однако подход @DontPanic лучше.
<?php
$teams = [1,2,3,4,5,6,7,8,9,10];
$played=[];
while(count($teams)) {
$a=$teams[0]; // take the first avaiable team
array_splice($teams,0,1); // remove it off the list
$j = rand(0,count($teams)-1); // randomly choose an opponent
$b = $teams[$j];
array_splice($teams,$j,1); // remove the opponent from the list
$mysqli->query("UPDATE 'jpa' SET 'war' = $b WHERE 'id' = $a");
$mysqli->query("UPDATE 'jpa' SET 'war' = $a WHERE 'id' = $b");
// optional for later use
$opponents = [$a,$b];
array_push($played, $opponents);
}
print_r($played);