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

PHP创建无重复值多维数组时偶发重复项问题如何解决?

问题根源

你代码中的去重逻辑存在多处缺陷,是偶发重复的核心原因:

  • 判断逻辑完全错误:你的array_search($row['nieruchomosc'], ...) ==0条件,仅当搜索结果是下标0、或者搜索不到返回false(弱等于0)时才会触发插入。如果重复值已经存在于新数组的非0下标位置,array_search会返回对应非0下标,此时条件不成立,就会再次插入相同值,直接导致重复。
  • 弱类型比较隐患:PHP中==是弱比较,false == 0、0 == '0'都会返回true,会进一步触发预期外的判断结果。
  • 效率极低:每次循环都执行array_unique+array_column,需要完整遍历整个新数组,数据量稍大就会出现性能问题。
  • 索引逻辑错误:无论是否插入新元素,$I每次循环都会自增,会导致新数组下标不连续,后续操作可能出现隐患。
修复方案

改用临时哈希表做存在性判断,性能和准确性都有保障:

$data['obchody']= $this->audytp_m->audytpro_obch();
$data['obchody_wsp']= [];
// 临时存储已存在的客户名称标识
$existedKeys = [];

foreach ($data['obchody'] as $row) {
    $currentKey = $row['nieruchomosc'];
    // 仅当该客户名称未出现过时插入新数组
    if (!isset($existedKeys[$currentKey])) {
        $data['obchody_wsp'][] = [
            'nieruchomosc' => $currentKey,
            'AudytPROInformacjaOUsludze' => $row['AudytPROInformacjaOUsludze'],
            'AudytPROCzestotliwoscObchodow' => $row['AudytPROCzestotliwoscObchodow']
        ];
        $existedKeys[$currentKey] = true;
    }
}
// 可选:清理临时变量
unset($existedKeys);
方案优势
  • 存在性判断时间复杂度为O(1),远高于原有遍历搜索的方案,数据量大时性能优势更明显
  • 用isset做强判断,完全避免弱类型比较的坑
  • 新数组天然是连续下标,不需要手动维护索引变量
  • 逻辑清晰,不会出现偶发重复的问题

内容的提问来源于stack exchange,提问作者Kordian Zadrożny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:18:02