导读:本期聚焦于小伙伴创作的《如何在 PHP 中基于 code 字段去重合并两个 stdClass 对象数组》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在 PHP 中基于 code 字段去重合并两个 stdClass 对象数组》有用,将其分享出去将是对创作者最好的鼓励。

在 PHP 项目里,经常会拿到两个由 stdClass 对象组成的数组,它们都包含 code 字段作为唯一标识。如果想把这两个数组合并,同时去掉 code 重复的项,可以用临时的关联数组来实现。

如何在 PHP 中基于 code 字段去重合并两个 stdClass 对象数组

问题说明

假设有两个数组 $listA 和 $listB,每个元素都是 stdClass,拥有 code 和 name 属性。直接合并可能会出现相同 code 的对象,需要进一步过滤。

实现思路

我们以 code 的值为键,把对象放进一个新数组。如果后面遇到相同的 code,就覆盖或者跳过,取决于想保留哪一份数据。最后用 array_values 让结果变回连续下标的数组。

基础示例代码

下面演示保留后面数组对象的方式:

<?php
$listA = [
    (object)['code' => 'a', 'name' => '苹果'],
    (object)['code' => 'b', 'name' => '香蕉']
];
$listB = [
    (object)['code' => 'b', 'name' => '香蕉更新'],
    (object)['code' => 'c', 'name' => '橙子']
];

$merged = [];
// 先放 A
foreach ($listA as $item) {
    $merged[$item->code] = $item;
}
// 再放 B,重复 code 时 B 覆盖 A
foreach ($listB as $item) {
    $merged[$item->code] = $item;
}

// 重置下标,得到 stdClass 对象数组
$result = array_values($merged);

print_r($result);
?>

保留前面数组的对象

如果希望重复时保留 $listA 中的数据,只需在放 B 时判断是否存在:

<?php
$merged = [];
foreach ($listA as $item) {
    $merged[$item->code] = $item;
}
foreach ($listB as $item) {
    // 仅当 code 不存在时才放入
    if (!isset($merged[$item->code])) {
        $merged[$item->code] = $item;
    }
}
$result = array_values($merged);
?>

封装成函数

可以把逻辑封装起来方便复用:

<?php
function merge_by_code(array $a, array $b, bool $keepFirst = false): array {
    $tmp = [];
    foreach ($a as $obj) {
        $tmp[$obj->code] = $obj;
    }
    foreach ($b as $obj) {
        if ($keepFirst && isset($tmp[$obj->code])) {
            continue;
        }
        $tmp[$obj->code] = $obj;
    }
    return array_values($tmp);
}
?>

小结

利用 code 作为临时键名是最直接有效的去重合并方式。它在处理接口数据、配置文件对象时都很实用,代码也容易理解和维护。

PHPstdClass数组去重修改时间:2026-07-28 04:36:10

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。