欢迎访问宙启技术站
智能推送

在PHP中使用array_unique函数删除数组中的重复元素

发布时间:2023-06-05 13:41:02

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()函数的应用,满足更复杂的数据处理需求。