在PHP中使用array_unique函数删除数组中的重复元素
array_unique()是PHP中一个非常常用的数组函数之一,它的主要功能是移除数组中重复的元素,并返回一个只包含 元素的新数组。在实际开发中,经常会遇到需要去重的情况,如用户提交的表单数据、从数据库中查询出的数据等。在这篇文章中,我们将学习如何使用array_unique函数来删除数组中的重复元素。
1. 基础用法
array_unique()函数接收一个数组作为参数,并返回一个新数组,其中包含原数组中所有不重复的元素。
基本用法如下:
$array = [1,2,3,4,3,2,1]; // 定义一个数组 $new_array = array_unique($array); // 调用array_unique函数 print_r($new_array); // 输出新数组
输出结果如下:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
可以看到,原数组中重复的元素被移除了,只剩下了不重复的元素。
2. 指定排序算法
在默认情况下,array_unique()函数使用的是PHP内置的哈希算法来检测重复元素。但是,如果数组中的元素不是基本类型,而是复杂类型如对象、数组等,则默认的哈希算法可能无法正确判断是否重复。
在这种情况下,我们可以通过指定排序算法来解决这个问题。array_unique()函数支持的排序算法有SORT_REGULAR、SORT_NUMERIC和SORT_STRING。
- SORT_REGULAR:按照普通比较规则比较元素。
- SORT_NUMERIC:按照数字比较规则比较元素。
- SORT_STRING:按照字符串比较规则比较元素。
例如,我们有一个数组$students,包含多个学生的信息,每个学生信息用一个数组表示,其中包含学号(id)、姓名(name)、年龄(age)等属性。我们要移除数组中id重复的学生信息,可以使用SORT_STRING排序算法来解决。
示例代码如下:
$students = [
['id' => '1001', 'name' => '张三', 'age' => 18],
['id' => '1003', 'name' => '李四', 'age' => 19],
['id' => '1002', 'name' => '王五', 'age' => 20],
['id' => '1001', 'name' => '赵六', 'age' => 21]
];
$new_students = array_unique($students, SORT_STRING);
print_r($new_students); // 输出新数组
输出结果如下:
Array
(
[0] => Array
(
[id] => 1001
[name] => 张三
[age] => 18
)
[1] => Array
(
[id] => 1003
[name] => 李四
[age] => 19
)
[2] => Array
(
[id] => 1002
[name] => 王五
[age] => 20
)
)
可以看到,重复的学生信息被成功移除了。
3. 保留原始键名
默认情况下,array_unique()函数会移除所有重复元素,并重新给新数组分配索引键名。但是,在某些情况下,我们可能希望保留原始键名,以便后续的数据处理。
在这种情况下,可以通过给array_unique()函数传递第二个参数来实现保留原始键名。第二个参数的值有两个选项,分别是SORT_REGULAR和SORT_STRING。选择SORT_STRING时,将以字符串类型比较数组元素;选择SORT_REGULAR时,将以正常类型比较元素。
例如,我们有一个数组$colors,其中包含多个配色方案,每个配色方案用一个关联数组表示,其中包含颜色名(name)和色值(value)两个属性。我们要移除数组中value重复的颜色方案,并保留原始键名,可以使用SORT_REGULAR排序算法和第二个参数来解决。
示例代码如下:
$colors = [
'color1' => ['name' => 'Red', 'value' => 'FF0000'],
'color2' => ['name' => 'Green', 'value' => '00FF00'],
'color3' => ['name' => 'Blue', 'value' => '0000FF'],
'color4' => ['name' => 'Orange', 'value' => 'FFA500'],
'color5' => ['name' => 'Red', 'value' => 'FF0000'],
'color6' => ['name' => 'Yellow', 'value' => 'FFFF00']
];
$new_colors = array_unique($colors, SORT_REGULAR);
print_r($new_colors); // 输出新数组
输出结果如下:
Array
(
[color1] => Array
(
[name] => Red
[value] => FF0000
)
[color2] => Array
(
[name] => Green
[value] => 00FF00
)
[color3] => Array
(
[name] => Blue
[value] => 0000FF
)
[color4] => Array
(
[name] => Orange
[value] => FFA500
)
[color6] => Array
(
[name] => Yellow
[value] => FFFF00
)
)
可以看到,重复的颜色方案对应的原始键名被保留了,而其他元素被移除了。
4. 使用自定义比较函数
在某些情况下,我们可能需要使用自定义的比较函数来比较数组元素,并判断是否重复。在这种情况下,可以使用usort()函数来对数组排序,并在排序过程中调用自定义比较函数来实现去重。
例如,假设我们有一个数组$fruits,其中包含多个水果名称,我们要移除数组中只有区分大小写的重复水果名称,可以使用自定义比较函数来解决。
示例代码如下:
$fruits = ['apple', 'pear', 'orange', 'Orange', 'APPLE', 'banana'];
function compare($a, $b)
{
return strtolower($a) <=> strtolower($b);
}
usort($fruits, 'compare');
$new_fruits = array_unique($fruits);
print_r($new_fruits); // 输出新数组
输出结果如下:
Array
(
[0] => apple
[1] => banana
[2] => orange
[4] => pear
)
可以看到,只有区分大小写的重复水果名称被移除了,其他元素被保留了。
总结
array_unique()函数是PHP中一个非常常用的数组函数,可以帮助我们在数组中移除重复元素,提高数据处理的效率。在实际开发中,我们会遇到各种各样的去重需求,通过掌握array_unique()函数的使用方法,我们可以轻松地应对各种情况。同时,我们也可以结合其他函数或技术来扩展array_unique()函数的应用,满足更复杂的数据处理需求。
