如何在 PHP 中使用 array_unique 函数去重关联数组?

在 PHP 中使用array_unique函数对关联数组去重相对复杂一些,因为array_unique函数默认是根据元素的值进行比较,对于关联数组,需要先将关联数组转换为可比较的形式,然后再进行去重操作。以下是一种常见的方法:

一、基于序列化数据进行去重

  1. 基本思路

    • 由于关联数组中的每个元素是一个键值对的组合,直接比较会有困难。我们可以将每个关联数组元素序列化为字符串,这样就可以得到一个唯一表示该元素的字符串。然后对这些序列化后的字符串组成的数组使用array_unique函数进行去重,最后再将去重后的序列化字符串还原为关联数组。
  2. 示例代码

$assocArray = [
    ['id' => 1, 'name' => 'John'],
    ['id' => 2, 'name' => 'Jane'],
    ['id' => 1, 'name' => 'John']
];

// 将关联数组元素序列化为字符串
$serializedArray = [];
foreach ($assocArray as $subArray) {
    $serializedArray[] = serialize($subArray);
}

// 使用array_unique函数去重
$uniqueSerializedArray = array_unique($serializedArray);

// 将去重后的序列化字符串还原为关联数组
$uniqueAssocArray = [];
foreach ($uniqueSerializedArray as $serializedSubArray) {
    $uniqueAssocArray[] = unserialize($serializedSubArray);
}

print_r($uniqueAssocArray);

二、基于自定义键值比较的去重(针对特定键)

  1. 基本思路

    • 如果只想根据关联数组中的某些特定键的值来进行去重,可以先提取这些键的值组成新的数组,然后使用array_unique函数对新数组进行去重,最后根据去重后的结果重新构建关联数组。
  2. 示例代码

$assocArray = [
    ['id' => 1, 'name' => 'John', 'city' => 'New York'],
    ['id' => 2, 'name' => 'Jane', 'city' => 'Los Angeles'],
    ['id' => 1, 'name' => 'John', 'city' => 'Chicago']
];

// 根据'id'和'name'键来进行去重
$keysToCheck = ['id', 'name'];
$newArray = [];
foreach ($assocArray as $subArray) {
    $key = '';
    foreach ($keysToCheck as $keyToCheck) {
        $key.= $subArray[$keyToCheck];
    }
    $newArray[] = $key;
}

$uniqueKeys = array_unique($newArray);

// 根据去重后的键重新构建关联数组
$uniqueAssocArray = [];
foreach ($uniqueKeys as $uniqueKey) {
    foreach ($assocArray as $subArray) {
        $key = '';
        foreach ($keysToCheck as $keyToCheck) {
            $key.= $subArray[$keyToCheck];
        }
        if ($key === $uniqueKey) {
            $uniqueAssocArray[] = $subArray;
            break;
        }
    }
}

print_r($uniqueAssocArray);
print_r($uniqueAssocArray);

在实际应用中,可以根据具体需求选择合适的去重方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/887532.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pikachu-File Inclusion-远程文件包含

远程文件包含漏洞 是指能够包含远程服务器上的文件并执行。由于远程服务器的文件是我们可控的,因此漏洞一旦存在,危害性会很大。但远程文件包含漏洞的利用条件较为苛刻;因此,在web应用系统的功能设计上尽量不要让前端用户直接传变…

水下声呐数据集,带标注

水下声呐数据集,带标注 水下声呐数据集 数据集名称 水下声呐数据集 (Underwater Sonar Dataset) 数据集概述 本数据集是一个专门用于训练和评估水下目标检测与分类模型的数据集。数据集包含大量的水下声呐图像,每张图像都经过专业标注,标明…

银河麒麟桌面操作系统修改默认Shell为Bash

银河麒麟桌面操作系统修改默认Shell为Bash 💐The Begin💐点点关注,收藏不迷路💐 在银河麒麟桌面操作系统(ARM版)中,若要将默认Shell从Dash改为Bash,可执行以下步骤: 打开…

记一次炉石传说记牌器 Crash 排查经历

大家好这里是 Geek技术前线。最近在打炉石过程中遇到了HSTracker记牌器的一个闪退问题,尝试性排查了下原因。这里简单记录一下 最近炉石国服回归;由于设备限制,我基本只会在 Mac 上打炉石。并且由于主要打竞技场,所以记牌器是必不…

河南移动:核心营业系统稳定运行超300天,数据库分布式升级实践|OceanBase案例

河南移动,作为电信全业务运营企业,不仅拥有庞大的客户群体和业务规模,还引领着业务产品与服务体系的创新发展。河南移动的原有核心营业系统承载着超过6000万的庞大用户量,管理着超过80TB的海量数据,因此也面临着数据规…

AI类课程的笔记

信息论、导论、模式识别(数据挖掘)、语义网络与知识图谱、深度学习、强化学习 (零)信息论 详见另一篇博文 信息论自总结笔记(仍然在更新)_信息论也更新了-CSDN博客https://blog.csdn.net/sinat_27382047/article/details/12690…

Elasticsearch 实战应用

Elasticsearch 实战应用 引言 Elasticsearch 是一个分布式、RESTful 风格的搜索和分析引擎,能够快速、实时地处理大规模数据,广泛应用于全文搜索、日志分析、推荐系统等领域。在这篇博客中,我们将从 Elasticsearch 的基本概念入手&#xff…

无神论文解读之ControlNet:Adding Conditional Control to Text-to-Image Diffusion Models

一、什么是ControlNet ControlNet是一种能够控制模型生成内容的方法,能够对文生图等模型添加限制信息(边缘、深度图、法向量图、姿势点图等),在当今生成比较火的时代很流行。 这种方法使得能够直接提供空间信息控制图片以更细粒…

Hive数仓操作(十七)

一、Hive的存储 一、Hive 四种存储格式 在 Hive 中,支持四种主要的数据存储格式,每种格式有其特点和适用场景,不过一般只会使用Text 和 ORC : 1. Text 说明:Hive 的默认存储格式。存储方式:行存储。优点…

设计模式、系统设计 record part03

创建者模式 1.创建、使用,二者分离 2.降低,耦合度 3.使用者,不用关注,对象的创建细节 工厂模式: 1.对象由工厂生产, 2.使用者与工厂交流,不与对象直接打交道, 3.在工厂里直接更换对象…

快手:数据库升级实践,实现PB级数据的高效管理|OceanBase案例

本文作者:胡玉龙,快手技术专家 快手在较初期采用了OceanBase 3.1版本成功替换了多个核心业务、数百套的MySQL集群。至2023年,快手的数据量已突破800TB大关,其中最大集群的数据量更是达到了数百TB级别。为此,快手将数据…

静止坐标系和旋转坐标系变换的线性化,锁相环线性化通用推导

将笛卡尔坐标系的电压 [ U x , U y ] [U_x, U_y] [Ux​,Uy​] 通过旋转变换(由锁相环角度 θ P L L \theta_{PLL} θPLL​ 控制)转换为 dq 坐标系下的电压 [ U d , U q ] [U_d, U_q] [Ud​,Uq​]。这个公式是非线性的,因为它涉及到正弦和余弦函数。 图片中的推导过程主要…

[C++]使用C++部署yolov11目标检测的tensorrt模型支持图片视频推理windows测试通过

官方框架: https://github.com/ultralytics/ultralytics yolov8官方最近推出yolov11框架,标志着目标检测又多了一个检测利器,于是尝试在windows下部署yolov11的tensorrt模型,并最终成功。 重要说明:安装环境视为最基…

总结TypeScript相关知识

目录 引入认识特点安装使用变量声明类型推导 JS 和 TS 共有类型number类型boolean类型string类型Array类型null和undefined类型object类型symbol类型对象类型函数类型 可选和只读type 和 interface索引签名类型断言非空类型断言类型缩小严格赋值检测现象TS 新增类型字面量类型a…

Golang | Leetcode Golang题解之第452题用最少数量的箭引爆气球

题目&#xff1a; 题解&#xff1a; func findMinArrowShots(points [][]int) int {if len(points) 0 {return 0}sort.Slice(points, func(i, j int) bool { return points[i][1] < points[j][1] })maxRight : points[0][1]ans : 1for _, p : range points {if p[0] > …

windows下安装rabbitMQ并开通管理界面和允许远程访问

如题&#xff0c;在windows下安装一个rabbitMQ server&#xff1b;然后用浏览器访问其管理界面&#xff1b;由于rabbitMQ的默认账号guest默认只能本机访问&#xff0c;因此需要设置允许其他机器远程访问。这跟mysql的思路很像&#xff0c;默认只能本地访问&#xff0c;要远程访…

Jenkins pipeline配置示例

前提条件&#xff1a;已经安装Jenkins并能正常启动 如果Jenkins安装启动遇到问题可以参考&#xff1a; 1.创建pipeline 点击新建项目&#xff1a; 输入名称&#xff0c;选择pipeline&#xff1a; 进入配置页面&#xff0c;如果要配置GitHub Webhook要勾选&#xff1a;<fo…

机器人的性能指标

1. 负荷能力 负荷能力负荷能力是指机器人在满足其他性能要求的情况下,能够承载的负荷重量。例如,一台机器人的最大负荷能力可能远大于它的额定负荷能力,但是达到最大负荷时,机器人的工作精度可能会降低,可能无法准确地沿着预定的轨迹运动,或者产生额外的偏差。机器人的负荷量与…

交换排序:冒泡排序、递归实现快速排序

目录 冒泡排序 1.冒泡排序的核心思想 2.冒泡排序的思路步骤 3.冒泡排序代码 4.代码分析 5.对冒泡排序的时间复杂度是O(N^2)进行解析 6.冒泡排序的特性总结 递归实现快速排序(二路划分版本) 1.快速排序基本思路 2.代码思路步骤 3.代码实现 4.代码分析 (1)递归终止条…

lrzsz串口文件传输

此时如果需要传输文件&#xff0c;需要借助rz/sz工具&#xff0c;可以使用的传输协议有ZMODEM、YMODEM、XMODEM&#xff0c;默认是ZMODEM。 https://en.wikipedia.org/wiki/ZMODEM https://gallium.inria.fr/~doligez/zmodem/zmodem.txt 这里记录item2下使用rz/sz进行文件传输…