таблица противников. Условие

0
 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");
    }
 }

Необходимо составить таблицу противников. Когда они выполняются, получаются те же результаты, как этого можно избежать?

  • 0
    1 = 4 2 = 3 3 = 5 4 = 1 5 = 3 6 = 4
  • 1
    Если я вас правильно понимаю, вы хотите собрать 6 (3?) Пар противников, как футбольные команды. И цель состоит в том, чтобы каждая команда играла только один раз. Это правильно?
Показать ещё 1 комментарий
Теги:

2 ответа

1
Лучший ответ

Начните с массива идентификаторов.

$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");
    }
}
  • 0
    а как сделать это случайно? Так что значения идут подряд 2,1,4,3,6,5
  • 0
    shuffle($ids) должен позаботиться об этом, если только я вас не понял.
Показать ещё 3 комментария
1

здесь другой подход, который я опубликую только потому, что я попробовал, и он работает. Однако подход @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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню