Php 查找值的最低组合
我有一张这样的桌子:Php 查找值的最低组合,php,find,Php,Find,我有一张这样的桌子: Name | Skill Joe | 21 Moe | 83 Doe | 71 Noe | 44 Zoe | 67 Noe | 33 使用PHP,我想生成两个组(他们将是足球队),并找到3个技能差异最小的组合,我的意思是,根据技能点,团队应该尽可能平等 如何执行此操作?假设您的信息存储在表单的数组$info中 Array ( [0] => Array ( [name] => Joe
Name | Skill
Joe | 21
Moe | 83
Doe | 71
Noe | 44
Zoe | 67
Noe | 33
使用PHP,我想生成两个组(他们将是足球队),并找到3个技能差异最小的组合,我的意思是,根据技能点,团队应该尽可能平等
如何执行此操作?假设您的信息存储在表单的数组$info中
Array
(
[0] => Array
(
[name] => Joe
[skill] => 21
)
[1] => Array
(
[name] => Moe
[skill] => 83
)
)
然后,您只需要取数组的笛卡尔积,忽略自比较和重复:
$skill_differences = array();
foreach ($info as $first) {
foreach ($info as $second) {
if (strcmp($first['name'], $second['name']) > 0) {
$skill_differences[] = array(
'name1'=>$first['name'],
'name2'=>$second['name'],
'diff'=>abs($first['skill']-$second['skill'])
);
}
}
}
注意:这假设玩家的名字是唯一的。如果不是,那么您需要给每个玩家一个唯一的标识符,并用它代替名称
然后我们可以根据玩家之间的技能差异来排列阵列:
function skill_cmp ($a, $b) {
return $a['diff'] - $b['diff'];
}
usort($skill_differences, 'skill_cmp');
因此,三个最低技能差异配对将是$skill\u differences
数组中的前三个元素。为什么不按技能排序,然后对结果进行分组?我想这个问题的答案会更好/更快,我想是的,但为了确保团队的规模相同吗(最好的组合可能是两人组和三人组)?是的,大小应该相同。通常是5vs5或6vs6。