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

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

相关文章:

  • 玩具CPSC认证办理流程
  • 力扣10.5
  • MS-900认证:Microsoft 365 Certified: Fundamentals
  • 【FreeRTOS】移植教程与官方文档
  • Leecode刷题之路第十天之正则表达式匹配
  • 安卓AI女友项目之安卓AI虚拟数字人整合开发
  • 【深度学习】自动微分——Autodiff or Autograd?
  • 使用JavaScript写一个网页端的四则运算器
  • 3.JVM
  • AI 激活新势能,中小企业全媒体营销绽放无限可能
  • struct和C++的类
  • 关键字:static
  • 【RISCV指令集手册】向量扩展v1.0
  • 视频剪辑软件哪个好?四大视频剪辑软件揭秘
  • 瓶颈ing
  • MySQL--聚合查询、联合查询、子查询、合并查询(上万字超详解!!!)
  • 什么是编译型语言,什么是解释性语言?java属于哪种?
  • 第3篇:Linux权限维持----应急响应之权限维持篇
  • 我的创作纪念日一年
  • qt 使用svg 图标的使用