如何为数组重复键添加数字后缀以保证唯一性(Whois数据处理)
解决方案:为重复键名添加数字后缀使其唯一
当然可以实现这个需求!我们只需要在处理Whois数据行的时候,额外跟踪每个键名的出现次数,当遇到重复键名时,给它加上递增的数字后缀就能保证数组键的唯一性了。
先把你提供的代码补全并修改,完整实现如下:
$test1 = $check_domain->find_whois_details("be.co"); $rows = explode("\n", $test1); $arr = array('info' => ""); $keyCounts = []; // 用来跟踪每个原始键名的出现次数 foreach($rows as $row) { $row = trim($row); // 移除行首尾空白,避免键名/值带多余空格 if(empty($row)) continue; // 跳过空行,避免无效数据 $posOfFirstColon = strpos($row, ":"); if($posOfFirstColon === FALSE) { // 没有冒号的行,追加到info字段,保留换行让格式更清晰 $arr['info'] .= $row . "\n"; } else { // 提取原始键名和对应值 $originalKey = trim(substr($row, 0, $posOfFirstColon)); $value = trim(substr($row, $posOfFirstColon + 1)); // 处理重复键名逻辑 if(isset($keyCounts[$originalKey])) { $keyCounts[$originalKey]++; $uniqueKey = $originalKey . "_" . $keyCounts[$originalKey]; } else { $keyCounts[$originalKey] = 0; $uniqueKey = $originalKey; } // 将处理后的唯一键和值存入数组 $arr[$uniqueKey] = $value; } }
关键逻辑说明:
$keyCounts计数器:这个数组专门记录每个原始键名已经出现的次数,第一次出现时计数为0,后续每重复一次计数递增1。- 空白处理:对每行和键名/值都做了
trim(),解决Whois数据中常见的首尾空格问题,避免出现Registrar(带空格)和Registrar被误判为不同键的情况。 - 空行跳过:直接跳过空行,避免生成无效的数组元素。
- 重复键处理:当检测到键名重复时,自动生成
原始键名_数字的唯一键,比如重复的Registrar会变成Registrar_1、Registrar_2等。
举个实际例子,如果你的Whois数据里有两行重复键:
Registrar: Example Domain Services
Registrar: Backup Registrar Ltd
处理后数组里的对应键值对会是:
[ 'Registrar' => 'Example Domain Services', 'Registrar_1' => 'Backup Registrar Ltd', // 其他键值对... ]
内容的提问来源于stack exchange,提问作者John O
相关产品推荐
相关产品推荐

