【发布时间】:2017-03-09 10:34:43
【问题描述】:
我有以下球员和他们的观点。我想将他们分成两个相等的团队,其中点的总和应该尽可能相等。
例如输出应该是:
队伍 a = 玩家 id 505、481、510,总积分为 6
队 b = 玩家 id 的 504、509、513,总积分为 6
请您帮我指出如何实现这一目标的正确方向?
谢谢
Array
(
[0] => Array
(
[match_id] => 664
[0] => 664
[player_id] => 505
[1] => 505
[Points] => 4
[2] => 4
)
[1] => Array
(
[match_id] => 664
[0] => 664
[player_id] => 481
[1] => 481
[Points] => 1
[2] => 1
)
[2] => Array
(
[match_id] => 664
[0] => 664
[player_id] => 510
[1] => 510
[Points] => 1
[2] => 1
)
[3] => Array
(
[match_id] => 664
[0] => 664
[player_id] => 504
[1] => 504
[Points] => 1
[2] => 1
)
[4] => Array
(
[match_id] => 664
[0] => 664
[player_id] => 509
[1] => 509
[Points] => 4
[2] => 4
)
[5] => Array
(
[match_id] => 664
[0] => 664
[player_id] => 513
[1] => 513
[Points] => 1
[2] => 1
)
)
【问题讨论】:
-
首先使用
mysqli_fetch_assoc()而不是mysqli_fetch_array(),然后您至少会以 assoc 数组而不是 assoc 和数字数组的形式获取数据一次 -
玩家人数也需要相等吗?您可以尝试按点对数组进行排序,并从最高点到最低点逐一添加玩家。 usort 可以帮助您。 usort - manual
function sortByPoints($a,$b){ return strcmp($a->Points,$b->Points); } usort($array,'sortByPoints'); -
您如何检索数据?如果您是从集合或数据库中查询,那么我认为您的第一步应该是改进查询以获得更可行的结果。大多数界面都可以让您按玩家查询并总结积分。这意味着您可以轻松地建立一个关联。只有玩家 ID 和总数的数组。然后一个简单的排序会将所有得分相似的人放在最接近的位置。
-
感谢大家的帮助和建议。我修改了查询以按点排序。然后做了一个 fetch assoc 并将数组分成两部分,奇数和偶数。