PHP 中数组去重的究极指南240


在 PHP 中,数组是一种有序的元素序列,元素可以是不同类型的数据。有时,您可能需要从数组中删除重复的元素,以便获得一个包含唯一元素的新数组。

内置去重函数

PHP 提供了多种内置函数来执行数组去重操作:
array_unique()

此函数返回一个包含数组中唯一元素的新数组:
$array = ['apple', 'banana', 'apple', 'cherry'];
$unique_array = array_unique($array);
print_r($unique_array);

输出:
Array
(
[0] => apple
[1] => banana
[2] => cherry
)


array_flip() + array_keys()

此组合函数利用了数组键的唯一性:
$array = ['apple', 'banana', 'apple', 'cherry'];
$unique_array = array_keys(array_flip($array));
print_r($unique_array);

输出:
Array
(
[0] => apple
[1] => banana
[2] => cherry
)


$result = array_values(array_unique($array));

此方法使用两个函数:array_unique() 和 array_values():
$array = ['apple', 'banana', 'apple', 'cherry'];
$result = array_values(array_unique($array));
print_r($result);

输出:
Array
(
[0] => apple
[1] => banana
[2] => cherry
)

自定义去重函数

除了内置函数外,您还可以创建自己的自定义去重函数:
function array_unique_custom($array) {
$unique_array = [];
foreach ($array as $item) {
if (!in_array($item, $unique_array)) {
$unique_array[] = $item;
}
}
return $unique_array;
}

此函数遍历数组并检查每个元素是否已存在于新数组中。如果不存在,则将其添加到新数组中。

对象和关联数组的去重

对于对象和关联数组,内置的 array_unique() 函数不起作用,因为它们将对象和键视为唯一标识符:
$array = [
['name' => 'apple'],
['name' => 'banana'],
['name' => 'apple']
];
$unique_array = array_unique($array);
print_r($unique_array);

输出:
Array
(
[0] => Array
(
[name] => apple
)
[1] => Array
(
[name] => banana
)
)

在这种情况下,自定义函数可以派上用场:
function array_unique_custom($array, $key) {
$unique_array = [];
$unique_keys = [];
foreach ($array as $item) {
if (!in_array($item[$key], $unique_keys)) {
$unique_array[] = $item;
$unique_keys[] = $item[$key];
}
}
return $unique_array;
}

此函数使用一个自定义比较函数来检查对象的特定属性是否唯一:
$array = [
['name' => 'apple'],
['name' => 'banana'],
['name' => 'apple']
];
$unique_array = array_unique_custom($array, 'name');
print_r($unique_array);

输出:
Array
(
[0] => Array
(
[name] => apple
)
[1] => Array
(
[name] => banana
)
)

性能考虑

在选择去重函数时,性能是一个重要的考虑因素。内置函数通常比自定义函数更快,但自定义函数提供了更大的灵活性。

如果您处理大型数组,则使用内置函数来获得最佳性能。对于更小的数组或需要自定义逻辑的情况,使用自定义函数可能是更好的选择。

此外,如果您需要处理对象或关联数组,则必须使用自定义函数才能获得准确的结果。

2024-10-18


上一篇:PHP 数组添加元素的权威指南

下一篇:PHP 数据库查询最佳实践和性能优化