0

0

PHPJSON怎么去重_php清理json数组中重复项的方式【说明】

雪夜

雪夜

发布时间:2026-03-08 16:45:52

|

904人浏览过

|

来源于php中文网

原创

php中array_unique()不能直接处理json字符串,须先json_decode()转数组;对对象数组需按字段(如id)去重,可用array_column()+array_unique()+array_filter()或array_reduce()实现。

phpjson怎么去重_php清理json数组中重复项的方式【说明】

PHP 中用 array_unique() 处理 JSON 数组去重,但得先解码

JSON 字符串本身是纯文本,不能直接去重;必须先用 json_decode() 转成 PHP 数组,再操作。常见错误是试图对 JSON 字符串调用 array_unique(),结果返回 null 或原样不变。

  • 如果 JSON 是对象数组(如 [{"id":1},{"id":1}]),array_unique() 默认按「字符串值」比较,会失效——因为两个对象转字符串都是 Object,判为相同
  • 若 JSON 是简单一维数组(如 [1,2,2,3]),array_unique($arr) 可直接用,但注意它保留原始键名,需用 array_values() 重排索引
  • 去重后别忘了用 json_encode() 转回 JSON,否则前端收不到合法格式

处理对象数组重复:用 array_column() + array_unique() 提取唯一标识

多数业务场景的“重复”其实指某个字段(如 idemail)相同。直接对整个对象去重不可靠,应先抽取出关键字段做去重依据。

  • json_decode($json, true) 得到关联数组
  • array_column($arr, 'id') 提取所有 id 值,再 array_unique() 得唯一 id 列表
  • 再用 array_filter() 遍历原数组,只保留 id 在唯一列表中首次出现的项(避免多次 in_array 低效)
  • 示例片段:
    $data = json_decode($json, true);
    $ids = array_column($data, 'id');
    $unique_ids = array_unique($ids);
    $seen = [];
    $result = array_filter($data, function($item) use ($unique_ids, &$seen) {
        if (!in_array($item['id'], $unique_ids)) return false;
        if (isset($seen[$item['id']])) return false;
        $seen[$item['id']] = true;
        return true;
    });

array_reduce() 一行逻辑完成对象去重(PHP 7.4+ 更简洁)

比起多次遍历,用 array_reduce() 累积去重结果更高效,也更容易控制“保留第一个还是最后一个”。尤其适合字段不固定、需动态指定去重键的场景。

Pokecut
Pokecut

AI图片编辑处理工具,拥有超过50多种AI功能

下载
  • 传入空数组作为初始值,每次检查当前项的去重键是否已存在,不存在则追加
  • 注意:array_reduce() 不保留原始键名,结果是数字索引数组,符合多数 API 返回预期
  • 示例(按 name 去重):
    $data = json_decode($json, true);
    $unique = array_reduce($data, function($carry, $item) {
        $key = $item['name'] ?? '';
        if (!isset($carry[$key])) {
            $carry[$key] = $item;
        }
        return $carry;
    }, []);
    $result = array_values($unique); // 去掉关联键,只留数值索引
  • 兼容性提示:PHP ?? 操作符

JSON 去重失败的三个典型错误信号

不是代码没跑,而是结果不对——这些现象说明去重逻辑或数据结构理解有偏差:

立即学习PHP免费学习笔记(深入)”;

  • json_decode() 返回 null:检查 JSON 格式是否合法(用 json_last_error_msg() 查错),常见于中文乱码、尾部逗号、单引号代替双引号
  • 去重后数组长度没变:大概率是对象数组被当字符串处理了,确认是否用了第二个参数 true(否则返回对象,array_unique() 无法处理)
  • 部分重复项还在:检查去重字段是否存在空值、大小写差异(如 "Email""email")、前后空格(需提前 trim()

真正麻烦的不是语法,是搞不清“重复”的定义——是整行完全一样?还是某个字段一样?这个判断必须在写代码前就明确,否则后面全白调。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

454

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

331

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

253

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1049

2024.03.01

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

738

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

219

2023.09.04

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

44

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号