如何配对数组中的项目?
假设我有一系列战士.我想根据他们的权重配对它们.最接近重量的战士应配对为最佳匹配.但如果他们在同一个团队中,他们就不应该配对.
假设我有一系列战士.我想根据他们的权重配对它们.最接近重量的战士应配对为最佳匹配.但如果他们在同一个团队中,他们就不应该配对.
> ** —第1队 – **
>战士A重量是60
>战斗机B重量是65
> ** – 第2队 – **
>战斗机C重量是62
>战斗机D重量是60
> ** – 第3队 – **
>战斗机E重量是64
>战斗机F重量是66
输出:
>战斗机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,new Fighter("C",62,"B"),new Fighter("D",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; } } }
>首先,战斗机被保留在课堂上,这样可以更容易地为他们分配属性(如果你自己没有这样做,我恳请你这样做!)
>制作一系列战士,并为他们分配名称,重量和团队.
>按重量对数组进行排序(使用usort()和排序函数sortFighters()按每个元素的weight属性排序.
>迭代数组并匹配基于:
>战斗机之一尚未匹配
>战斗机2与战斗机不在同一个团队中
>战斗机2尚未匹配
>当找到匹配时,将每个匹配战士的对象指针相互存储(因此它不再为空,加上你可以通过转到$fighterVariable->配对来访问每个战士的对)>最后,打印结果.