gpt4 book ai didi

PHP-如何根据条件配对数组中的项目

转载 作者:可可西里 更新时间:2023-11-01 12:35:46 27 4
gpt4 key购买 nike

如何配对数组中的项目?假设我有一组 Fighters。我想根据他们的体重将他们配对。体重最相近的拳手应作为最佳匹配配对。但如果他们在同一个团队中,则不应配对

  • **---团队 1--**
  • 战斗机 A 体重为 60
  • 战斗机 B 体重为 65
  • **--第2组--**
  • 战斗机 C 体重为 62
  • 战士 D 体重 60
  • **--第3组--**
  • 战斗机 E 重量为 64
  • 拳手F体重66

输出:

  • 战斗机 A VS 战斗机 D
  • 斗士B VS斗士F
  • 战斗机 C VS 战斗机 E

我一直在研究这个主题,发现了一些类似但不完全相同的东西: Random But Unique Pairings, with Conditions

非常感谢您的帮助。提前致谢!

最佳答案

我非常喜欢你的问题,所以我做了一个完整的健壮版本。

<?php

header("Content-type: text/plain");
error_reporting(E_ALL);

/**
* @class Fighter
* @property $name string
* @property $weight int
* @property $team string
* @property $paired Fighter Will hold the pointer to the matched Fighter
*/
class Fighter {
public $name;
public $weight;
public $team;
public $paired = null;

public function __construct($name, $weight, $team) {
$this->name = $name;
$this->weight = $weight;
$this->team = $team;
}
}

/**
* @function sortFighters()
*
* @param $a Fighter
* @param $b Fighter
*
* @return int
*/
function sortFighters(Fighter $a, Fighter $b) {
return $a->weight - $b->weight;
}

$fighterList = array(
new Fighter("A", 60, "A"),
new Fighter("B", 65, "A"),
new Fighter("C", 62, "B"),
new Fighter("D", 60, "B"),
new Fighter("E", 64, "C"),
new Fighter("F", 66, "C")
);
usort($fighterList, "sortFighters");

foreach ($fighterList as $fighterOne) {
if ($fighterOne->paired != null) {
continue;
}
echo "Fighter $fighterOne->name vs ";
foreach ($fighterList as $fighterTwo) {
if ($fighterOne->team != $fighterTwo->team && $fighterTwo->paired == null) {
echo $fighterTwo->name . PHP_EOL;
$fighterOne->paired = $fighterTwo;
$fighterTwo->paired = $fighterOne;
break;
}
}

}
  1. 首先,战士被分类,这使得为它们分配属性变得更容易(如果您自己还没有这样做,我强烈建议您这样做!)
  2. 制作一组拳击手,并为他们指定名称、重量和团队。
  3. 按权重对数组进行排序(使用 usort() 和排序函数 sortFighters() 按每个元素的权重属性排序。
  4. 遍历数组并匹配基于:
    1. 战斗机一号尚未匹配
    2. 二号战士与一号战士不在同一个队伍中
    3. 战斗机二尚未匹配
  5. 找到匹配项后,将每个匹配战斗机的对象指针存储到彼此(因此它不再为空,而且您可以通过转到 $fighterVariable->paired 访问每个战斗机对>)
  6. 最后,打印结果。

关于PHP-如何根据条件配对数组中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9239598/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com