php - PHP:只有唯一对的嵌套循环
问题描述
我需要创建一个只有唯一对的数组,所以没有重复。问题是,当只是相互迭代时,由于某种原因,最后一对通常是重复的。
所以这里有一个简单的例子:
<?php
$teams = [
['id' => 1],
['id' => 2],
['id' => 3],
['id' => 4],
];
foreach ($teams as $team_a) {
foreach ($teams as $team_b) {
if ($team_a['id'] !== $team_b['id']) {
$pairs[] = [$team_a['id'], $team_b['id']];
}
}
}
?>
返回如下内容:
0: [1, 2]
1: [1, 3]
2: [1, 4]
3: [2, 1]
4: [2, 3]
5: [2, 4]
6: [3, 1]
7: [3, 2]
8: [3, 4]
...
所以你可以看到有些对是相同的,比如[1, 2]
和[2, 1]
。在半次迭代之后,只有重复。
像这样迭代并确保只有唯一对的最有效方法是什么?
谢谢!
解决方案
显然,当 key(team_a) > key(team_b) 时总是出现重复项
<?php
$teams = [
['id' => 1],
['id' => 2],
['id' => 3],
['id' => 4],
];
foreach ($teams as $offset => $team_a) {
foreach (array_slice($teams, $offset+1) as $team_b) {
$pairs[] = [$team_a['id'], $team_b['id']];
}
}
推荐阅读
- amazon-web-services - PyTest 与 AWS CodePipeline
- python - 在 YahooEarningsCalendar 类中出现以下错误“IndexError: list index out of range”
- git - git rebase 说我只碰了5个文件就修改了380个文件
- javascript - Bot 不断在欢迎频道发送垃圾邮件
- typescript - 如何使用 WorkBox 禁用缓存服务人员
- google-drawings - Google 绘图 - 现在无法打开 .wmf 文件
- r - 三向列联表 gtsummary
- javascript - 如何显示从一个公共点开始的数据
- spring-boot - Springboot反序列化“>”符号为>和“<”为<
- youtube - Youtube-dl 仅选择主要发行艺术家和年份并添加自定义元数据