PHP array_unique 函数
最后修改于 2025 年 3 月 13 日
PHP 的 array_unique 函数用于移除数组中的重复值。它有助于清理数据并确保元素的唯一性。
基本定义
array_unique 函数接收一个数组,并返回一个不包含重复值的新数组。它会保留第一次出现元素的键。
语法:array_unique(array $array, int $flags = SORT_STRING): array。flags 参数控制比较行为(SORT_REGULAR、SORT_NUMERIC)。
基本的 array_unique 示例
这展示了移除数组重复值最简单的用法。
<?php $numbers = [1, 2, 2, 3, 4, 4, 5]; $uniqueNumbers = array_unique($numbers); print_r($uniqueNumbers);
输出:Array ( [0] => 1 [1] => 2 [3] => 3 [4] => 4 [6] => 5 )。该函数在保留第一次出现元素及其键的同时移除了重复项。
字符串数组示例
移除数组中的重复字符串,同时保留大小写敏感性。
<?php $fruits = ["apple", "Apple", "banana", "banana", "orange"]; $uniqueFruits = array_unique($fruits); print_r($uniqueFruits);
输出:Array ( [0] => apple [1] => Apple [2] => banana [4] => orange )。请注意,“apple”和“Apple”由于大小写敏感而被视为不同。
使用 Flags 参数
演示 flags 参数如何影响比较行为。
<?php $values = ["10", 10, "20", 20, "30"]; $uniqueRegular = array_unique($values, SORT_REGULAR); $uniqueString = array_unique($values, SORT_STRING); echo "SORT_REGULAR: "; print_r($uniqueRegular); echo "SORT_STRING: "; print_r($uniqueString);
SORT_REGULAR 将 "10" 和 10 视为相等(类型转换),而 SORT_STRING 将它们视为不同。根据您的需求选择合适的标志。
关联数组示例
移除关联数组中的重复项,同时保留键。
<?php
$users = [
"john" => "admin",
"jane" => "editor",
"bob" => "admin",
"alice" => "viewer"
];
$uniqueRoles = array_unique($users);
print_r($uniqueRoles);
输出:Array ( [john] => admin [jane] => editor [alice] => viewer )。重复的“admin”角色被移除,同时保留了第一次出现。
多维数组挑战
展示多维数组的局限性及一种解决方法。
<?php
$data = [
["id" => 1, "name" => "John"],
["id" => 2, "name" => "Jane"],
["id" => 1, "name" => "John"],
];
// array_unique won't work directly on multidimensional arrays
$serialized = array_map('serialize', $data);
$unique = array_unique($serialized);
$result = array_map('unserialize', $unique);
print_r($result);
此解决方法通过序列化每个元素进行比较,然后反序列化回来。输出仅显示基于所有属性的唯一对象。
最佳实践
- 性能:对于大型数组,请考虑先进行排序。
- 类型感知:注意类型比较行为。
- 键保留:请记住原始键会被保留。
- 多维:对于复杂数组,请使用序列化。
来源
本教程通过实际示例介绍了 PHP 的 array_unique 函数,展示了其在移除重复数组值方面的用法。
作者
列出 所有 PHP 数组函数。