当前位置: 首页 > article >正文

如何在 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.kler.cn/news/337023.html

相关文章:

  • 如何把数组作为参数传递给函数(注意,只是传递数组名)?
  • OJ在线评测系统 微服务高级 网关跨域权限校验 集中解决跨域问题 拓展 JWT校验和实现接口限流降级
  • 【ShuQiHere】 重新定义搜索:本体搜索引擎的时代
  • wsl环境下安装MySQL5.7
  • matlab初学习记录
  • vue双向绑定/小程序双向绑定区别
  • 【高等代数笔记】线性空间(十九-二十四上半部分)
  • 驱动程序-启动内核
  • 在CentOS7上安装mysql
  • 高效数据处理:MapReduce与Hive的实战应用
  • 短剧系统源码短剧平台开发(H5+抖小+微小)部署介绍流程
  • Ollama接口系统详解
  • LabVIEW提高开发效率技巧----点阵图(XY Graph)
  • 什么是守护进程??
  • YOLO11改进|注意力机制篇|引入大核可分离卷积注意力块LSKA
  • 【动态规划-最长公共子序列(LCS)】力扣97. 交错字符串
  • R中的箱线图
  • 人机协作:科技与人类智慧的融合
  • MySQL 实验 7:索引的操作
  • 解锁语言之门:中英文翻译工具全解析