php算法-- 关联数组使用,优化sip账号去重
文章目录
-
-
- 1 变量定义
- 2. 核心特性
- code
-
1 变量定义
- 类型:嵌套的关联数组(Nested Associative Array)
- 外层结构:[中继ID => 账号列表]
- 键 (Key):中继ID(字符串或整型)
- 值 (Value):索引数组(包含属于该中继的所有SIP账号字符串)
内存形态:
php
[
“中继ID_A” => [“账号1”, “账号2”, …],
“中继ID_B” => [“账号X”, “账号Y”, …]
]
数据结构存储
// 初始状态
$existingAccounts = [
“2” => [“1001”],
“5” => [“2001”]
];
// 添加新账号到中继2
$existingAccounts[“2”][] = “1002”;
// 添加新中继组
$existingAccounts[“9”] = [“3001”];
// 最终形态
[
“2” => [“1001”, “1002”],
“5” => [“2001”],
“9” => [“3001”]
]
2. 核心特性
isset($existingAccounts[$trunkIdx])
可瞬间判断中继是否存在in_array($account, $existingAccounts[$trunkIdx])
检查账号重复性in_array解析:
$needle:要搜索的值(示例中的 SIP 账号)$haystack:被搜索的数组(示例中的 $existingAccounts[$trunkIdx])bool in_array(mixed $needle, array $haystack [, bool $strict = false])
code
1 基础功能:账号添加
// 检查中继组是否存在if (!isset($existingAccounts[$trunkIdx])) { // 新建中继分组(初始化空数组) $existingAccounts[$trunkIdx] = [];}// 添加账号到中继组$existingAccounts[$trunkIdx][] = $account;
2 去重高效性 ,添加新账号时,只需两步验证
$trunkIdx = \"2\"; // 目标中继$newAccount = \"1002\";if (isset($existingAccounts[$trunkIdx]) && in_array($newAccount, $existingAccounts[$trunkIdx])) { // 账号已存在 → 拒绝添加} else { // 安全添加账号}
3 函数封装
// 新增账号时防重复检查function addAccount($trunkIdx, $account) { global $existingAccounts; if (isset($existingAccounts[$trunkIdx]) { if (in_array($account, $existingAccounts[$trunkIdx])) { throw new Exception(\"账号 $account 已存在于中继 $trunkIdx\"); } } else { $existingAccounts[$trunkIdx] = []; // 初始化新中继组 } // 安全添加账号 $existingAccounts[$trunkIdx][] = $account;}// 示例:添加重复账号(触发异常)addAccount(\"2\", \"1001\"); // 抛出异常:账号1001已存在于中继2