php - расчеты для каждой комбинации в массиве - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть этот массив с командами, которые участвуют в соревновании, теперь я хочу сделать некоторые расчеты для каждого предстоящего матча.

Array
(
    [Team1] => Array
        (
            [totalHomeGoals] => 48
            [totalHomeAgainstGoals] => 12
            [totalAwayGoals] => 31
            [totalAwayAgainstGoals] => 11
        )

    [Team2] => Array
        (
            [totalHomeGoals] => 31
            [totalHomeAgainstGoals] => 25
            [totalAwayGoals] => 25
            [totalAwayAgainstGoals] => 27
        )

    [Team3] => Array
        (
            [totalHomeGoals] => 22
            [totalHomeAgainstGoals] => 21
            [totalAwayGoals] => 15
            [totalAwayAgainstGoals] => 38
        )
)

Итак, теперь я хочу сделать расчеты для каждого возможного совпадения.Для простоты, скажем, я хочу добавить AwayGoals к Homegoals, вот так:

Team1 vs Team2 -> 48 + 25  
Team2 vs Team1 -> 31 + 31  
Team1 vs Team3 -> 48 + 15  
Team3 vs Team1 -> 22 + 31  
Team2 vs Team3 -> 31 + 15  

и т. Д.
и т. Д. Для всех 12 возможных совпадений

В каком направлении я должен смотретьчтобы сделать это?

1 Ответ

0 голосов
/ 26 сентября 2018

Хорошо, вот мое предложение.

Сначала я исправил ваш массив.

$teams = Array
(
    'Team1' => Array
    (
        'totalHomeGoals'        => 48,
        'totalHomeAgainstGoals' => 12,
        'totalAwayGoals'        => 31,
        'totalAwayAgainstGoals' => 11
    ),
    'Team2' => Array
    (
        'totalHomeGoals'        => 31,
        'totalHomeAgainstGoals' => 25,
        'totalAwayGoals'        => 25,
        'totalAwayAgainstGoals' => 27
    ),
    'Team3' => Array
    (
        'totalHomeGoals'        => 22,
        'totalHomeAgainstGoals' => 21,
        'totalAwayGoals'        => 15,
        'totalAwayAgainstGoals' => 38,
    )
);

Затем я создал функцию, которая будет предоставлять уникальный командный результат, а не.Вот как выглядит код.

function showResult($i, $j, $param1, $param2, $teams, $teamKeys) {
    echo $teamKeys[$i] . ' vs ' . $teamKeys[$j] . ' -> ' . $teams[$teamKeys[$i]][$param1] . ' + ' . $teams[$teamKeys[$j]][$param2] . '<br/>';
}

function getAllResult($teams, $param1, $param2, $unique=true) {
    $teamKeys = array_keys($teams);
    for ($i = 0; $i < count($teams); $i++) {
        if(!$unique) {
            for ($j = 0; $j < count($teams); $j++) {
                showResult($i, $j, $param1, $param2, $teams, $teamKeys);
            }
        } else {
            for ($j = $i + 1; $j < count($teams); $j++) {
                showResult($i, $j, $param1, $param2, $teams, $teamKeys);
            }
        }
    }
}

Вот как это работает, если вы хотите повторить вероятность, например, Team1 VS Team2 и Team2 VS Team1.

getAllResult($teams, 'totalHomeGoals', 'totalAwayGoals', false);

Вывод:

Team1 vs Team1 -> 48 + 31
Team1 vs Team2 -> 48 + 25
Team1 vs Team3 -> 48 + 15
Team2 vs Team1 -> 31 + 31
Team2 vs Team2 -> 31 + 25
Team2 vs Team3 -> 31 + 15
Team3 vs Team1 -> 22 + 31
Team3 vs Team2 -> 22 + 25
Team3 vs Team3 -> 22 + 15

Вот как это работает, если вы хотите иметь только уникальные вероятности.

getAllResult($teams, 'totalHomeGoals', 'totalAwayGoals');

Вывод:

Team1 vs Team2 -> 48 + 25
Team1 vs Team3 -> 48 + 15
Team2 vs Team3 -> 31 + 15

Затем вы можете изменить атрибутза то, что вы предпочитаете.

Дайте мне знать, если у вас есть какие-либо вопросы

...