
本文介绍如何使用嵌套 foreach 循环遍历一维数组,为其中每个元素与其他所有不同元素构建“源(source)→ 目标(destination)”关系,并以结构化数组形式存储结果,适用于路径映射、权限配置或图结构建模等场景。
在 PHP 开发中,常需将一个元素集合两两组合,生成所有可能的有序非自连关系(即 source ≠ destination),例如构建有向图边集、生成测试用例配对、或实现多对多路由逻辑。给定数组 ['1','2','3','4'],目标是输出 12 条记录——每个元素作为 source 时,依次与其余 3 个不同元素配对作为 destination。
实现核心逻辑是双重遍历 + 排除自匹配:外层循环取 source,内层循环取 candidate destination;当两者值相等时跳过,否则存入结果数组。
以下是完整可运行示例代码:
$source,
'destination' => $destination
];
}
}
// 输出结构化结果(可用于插入数据库、JSON API 响应等)
print_r($newArr);
?>✅ 关键要点说明:
立即学习“PHP免费学习笔记(深入)”;
- 使用 === 进行严格比较,避免类型隐式转换导致误判;
- 结果数组 $newArr 是标准关联数组,每个子项含 'source' 和 'destination' 键,便于后续插入数据库(如 INSERT INTO edges (source, destination) VALUES (?, ?))或序列化为 JSON;
- 时间复杂度为 O(n²),适用于中小规模数据(n ≤ 1000);若数组极大,建议改用生成器(Generator)流式处理以节省内存;
- 若需去重无序对(如仅保留 1→2 不保留 2→1),则可在内层循环中限定 $b 的索引大于 $a 的索引(需改用 for 循环配合 array_keys())。
该方案简洁、可读性强,无需依赖额外扩展,兼容 PHP 7.0+,是构建全连接有向关系的通用实践。











