You need to enable JavaScript to run this app. PHP实现数组同ID统一SeqNr、异ID自动递增的处理方法
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现数组同ID统一SeqNr、异ID自动递增的处理方法

按规则分配SeqNr的PHP实现

现有代码问题

原代码每次循环都将$seqNr硬编码初始化为1,未维护ID与已分配编号的映射关系,也没有实现计数器递增逻辑,导致所有记录的SeqNr固定为1,不符合要求。

正确实现代码

<?php
$array = [
    ['id' => 111, 'name' => 'one'],
    ['id' => 111, 'name' => 'one'],
    ['id' => 111, 'name' => 'one'],
    ['id' => 222, 'name' => 'two'],
    ['id' => 333, 'name' => 'three'],
    ['id' => 444, 'name' => 'four'],
    ['id' => 444, 'name' => 'four'],
];

// 初始化两个核心变量:
// 1. ID与已分配SeqNr的映射表,避免重复ID重复计数
// 2. 当前最新的SeqNr计数器,遇到新ID时递增
$idSeqMap = [];
$currentSeq = 0;

foreach ($array as $key => $value) {
    $id = $value['id'];
    // 判断当前ID是否已经分配过编号
    if (!isset($idSeqMap[$id])) {
        // 首次出现的新ID,计数器+1后分配编号
        $currentSeq++;
        $idSeqMap[$id] = $currentSeq;
    }
    // 直接取映射表中该ID对应的统一SeqNr
    $seqNr = $idSeqMap[$id];

    // 按原逻辑输出结果
    echo " ID: " . $id . " SeqNr " . $seqNr . PHP_EOL;
    // 如果需要将SeqNr写入每条记录,可开启下面这行
    // $array[$key]['seq_nr'] = $seqNr;
}
?>

代码逻辑说明

  • 相同ID无论连续出现、还是后续再次出现,都直接复用映射表中已分配的SeqNr,保证取值统一
  • 只有首次遇到的新ID才会触发计数器递增,完全符合「新ID在前一个已分配SeqNr基础上依次递增」的规则
  • 支持任意顺序的ID排列,不需要提前对数组按ID排序

内容的提问来源于stack exchange,提问作者Kudos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 00:06:09