PHP的array_unique函数:去重从未如此简单

引言

PHP编程中,我们经常需要对数组进行去重操作。然而,手动去重十分繁琐且容易出错。这时,PHP的array_unique函数就能派上用场了。本文将介绍array_unique函数的使用方法和一些实用技巧,帮助大家更加轻松地进行数组去重。

基本用法

array_unique函数的作用是从数组中移除重复的值,并返回新的数组。使用方法非常简单,只需将待去重的数组作为参数传入即可:

$array = array(1, 2, 2, 3, 4, 4, 4, 5);
$result = array_unique($array);
print_r($result);

上述代码中,$array数组包含了一些重复的值。调用array_unique函数后,返回的新数组$result将只包含不重复的值。运行上述代码,输出结果如下:

Array
(
    [0] => 1
    [1] => 2
    [3] => 3
    [4] => 4
    [7] => 5
)

可以看到,$result数组中只包含了不重复的值。

可选参数

除了传入待去重的数组外,array_unique函数还接受一个可选的参数$sort_flags。该参数用于指定排序方式,支持以下三种取值:

  • SORT_STRING - 按照字符串排序
  • SORT_NUMERIC - 按照数字排序
  • SORT_REGULAR - 普通排序方式

默认情况下,array_unique函数采用SORT_STRING排序方式。下面是一个例子:

$fruits = array("apple", "banana", "orange", "banana", "pear");
$result = array_unique($fruits, SORT_STRING);
print_r($result);

上述代码中,$fruits数组中包含了重复的值"banana"。调用array_unique函数后,返回的新数组$result将只包含不重复的值,并按照字符串排序。运行上述代码,输出结果如下:

Array
(
    [0] => apple
    [1] => banana
    [2] => orange
    [4] => pear
)

实用技巧

去除空值

有时候,待去重的数组中会包含一些空值。如果不处理这些空值,很可能会导致去重失败。针对这种情况,我们可以使用array_filter函数先将空值过滤掉,再调用array_unique函数进行去重。下面是一个例子:

$values = array("a", "b", null, "c", "", "d");
$result = array_unique(array_filter($values));
print_r($result);

上述代码中,$values数组中包含了一些空值。调用array_filter函数后,仅保留了非空值。再调用array_unique函数后,返回的新数组$result将只包含不重复的非空值。运行上述代码,输出结果如下:

Array
(
    [0] => a
    [1] => b
    [3] => c
    [5] => d
)

去重关联数组

array_unique函数默认只能去重索引数组,而不能去重关联数组。但是,我们可以通过一些技巧来实现对关联数组的去重。下面是一个例子:

PHP的array_unique函数:去重从未如此简单

$data = array(
    array("id" => 1, "name" => "Alice"),
    array("id" => 2, "name" => "Bob"),
    array("id" => 1, "name" => "Charlie"),
    array("id" => 3, "name" => "David"),
    array("id" => 2, "name" => "Eve")
);

// 将数组转化为json字符串,并去重
$json_data = array_map('json_encode', $data);
$unique_json_data = array_unique($json_data);

// 将json字符串转化为数组
$unique_data = array_map('json_decode', $unique_json_data, array_fill(0, count($unique_json_data), true));

print_r($unique_data);

上述代码中,$data数组包含了一些关联数组,其中有些数组的"id"值重复。为了实现对关联数组的去重,我们先将数组转化为json字符串,并使用array_unique函数对json字符串数组进行去重。然后,再将json字符串数组转化为关联数组即可。运行上述代码,输出结果如下:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [name] => Alice
        )

    [1] => stdClass Object
        (
            [id] => 2
            [name] => Bob
        )

    [3] => stdClass Object
        (
            [id] => 3
            [name] => David
        )

)

结论

通过本文的介绍,我们了解了array_unique函数的基本用法和一些实用技巧。使用array_unique函数可以轻松地进行数组去重,提高了开发效率。但是,需要注意的是,array_unique函数的去重是基于值而不是键的,因此对于关联数组的去重需要使用一些特殊的技巧。

最后编辑于:2023/12/10作者: 心语漫舞