在PHP中,数组去重通常可以使用array_unique()函数来实现。然而,如果你想使用闭包(匿名函数)来实现数组去重,也是可以的。你可以结合array_filter()或array_reduce()等函数来实现这个功能。
array_reduce()和闭包实现数组去重<?php
$array = [1, 2, 2, 3, 4, 4, 5];
$uniqueArray = array_reduce($array, function($carry, $item) {
if (!in_array($item, $carry)) {
$carry[] = $item;
}
return $carry;
}, []);
print_r($uniqueArray);
?>
array_reduce() 函数将数组中的每个元素传递给闭包函数进行处理。$carry 是累加器,初始值为空数组 []。$item 是当前处理的数组元素。$item 是否已经存在于 $carry 中。如果不存在,则将其添加到 $carry 中。$carry 将包含去重后的数组。Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
array_filter()和闭包实现数组去重<?php
$array = [1, 2, 2, 3, 4, 4, 5];
$seen = [];
$uniqueArray = array_filter($array, function($item) use (&$seen) {
if (!in_array($item, $seen)) {
$seen[] = $item;
return true;
}
return false;
});
print_r($uniqueArray);
?>
array_filter() 函数会遍历数组中的每个元素,并将元素传递给闭包函数。true 或 false 来决定是否保留该元素。$seen 数组用于记录已经出现过的元素。$seen 中,则将其添加到 $seen 中并返回 true,否则返回 false。Array
(
[0] => 1
[1] => 2
[3] => 3
[4] => 4
[6] => 5
)
虽然PHP提供了array_unique()函数来直接去重,但使用闭包结合array_reduce()或array_filter()也可以实现相同的功能。这种方法在某些特定场景下可能更有灵活性,尤其是当你需要在去重的同时进行其他操作时。