You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为数组重复键添加数字后缀以保证唯一性(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:30:32