【问题标题】:php - making calculations for every combination in arrayphp - 为数组中的每个组合进行计算
【发布时间】:2018-09-25 20:24:31
【问题描述】:

我有这个数组,里面有参加比赛的球队,现在我想为每场比赛进行一些计算。

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个可能的匹配

我应该寻找什么方向来实现这一目标?

【问题讨论】:

  • 你试过两个嵌套的for循环吗?这对你有用吗?
  • @JonathanGagne 我做到了,但由于我的声誉,它不会显示(我收到一条消息,我的投票已记录但不会显示)
  • @Awesom-o 哦,我明白了,顺便说一句,非常感谢!祝你有美好的一天!

标签: php arrays loops foreach


【解决方案1】:

好的,这是我的建议。

首先我修复了你的数组。

$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

然后,您可以根据需要更改属性。

如果您有任何问题,请告诉我

【讨论】:

    猜你喜欢
    • 2018-05-13
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    相关资源
    最近更新 更多