首页 > 解决方案 > 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]。在半次迭代之后,只有重复。

像这样迭代并确保只有唯一对的最有效方法是什么?

谢谢!

标签: phploops

解决方案


显然,当 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']];
    }
}

推荐阅读