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

PHP while循环统计重复账号出现次数计数结果异常问题

PHP循环统计账号出现次数异常问题排查

问题背景

现有一段从数据库轮询拉取数据的脚本,需求为在while loop内统计重复出现账号的出现次数,但运行后计数结果始终和拉取到的总记录数挂钩,不符合预期。
经测试数据核对:客户号100001实际仅出现4次,但当前while循环执行过程中,该账号及其他账号的计数随遍历的总记录数同步增长,输出结果异常。

原有实现代码

$itemArray = array();
$check = array();
$amount = array(); 
while ($row =  sqlsrv_fetch_array($empRecords, SQLSRV_FETCH_ASSOC)) {

   $itemArray[] = $row['ac_no']; 
   $amount[] = $row['accountBalance']; 

    foreach ($itemArray as $cust_no)
    {
        if (isset($result[$cust_no]))
        {
            $result[$cust_no]++;
        }
        else
        {
            $result[$cust_no] = 1;
        }
    }

    foreach ($result as $cust_no => $count)
    {
        echo "{$cust_no}: {$count}" . "<br/>";
    }

}

核心逻辑错误

  • 计数逻辑位置错误:每读取1条新记录,就遍历**全量历史账号数组$itemArray**给所有账号计数+1,而非仅给当前新读取到的单条账号计数。假设共读取n条记录,第k次循环时数组长度为k,所有已存入数组的账号都会被重复累加,最终计数和真实出现次数完全无关,只会随总记录数线性增长。
  • 输出时机错误:在while循环内部就输出计数结果,此时数据拉取和计数尚未完成,输出的是每轮错误累加的中间值,而非最终统计结果。
  • 冗余代码问题:定义了$check变量但全程未使用,属于无效声明。

修正后代码

$itemArray = array();
$amount = array(); 
$result = array();
while ($row =  sqlsrv_fetch_array($empRecords, SQLSRV_FETCH_ASSOC)) {
    $currentAcNo = $row['ac_no'];
    $itemArray[] = $currentAcNo; 
    $amount[] = $row['accountBalance']; 

    // 仅对当前读取到的单条账号做计数更新
    if (isset($result[$currentAcNo])) {
        $result[$currentAcNo]++;
    } else {
        $result[$currentAcNo] = 1;
    }
}
// 所有数据处理完成后统一输出统计结果
foreach ($result as $cust_no => $count) {
    echo "{$cust_no}: {$count}" . "<br/>";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:06:58