插件窝 干货文章 PHP数组去重可以保留最后一个出现的元素吗

PHP数组去重可以保留最后一个出现的元素吗

array 数组 result 方法 145    来源:    2025-03-16

在PHP中,数组去重通常使用array_unique()函数,但该函数会保留第一个出现的元素,而不是最后一个。如果你希望保留最后一个出现的元素,可以通过以下方法实现:

方法1:使用array_reverse()array_unique()

  1. 先将数组反转,这样最后一个元素会变成第一个。
  2. 使用array_unique()去重。
  3. 再次反转数组,恢复原始顺序。
$array = [1, 2, 3, 2, 4, 3, 5];

// 反转数组
$reversed = array_reverse($array);

// 去重
$unique = array_unique($reversed);

// 再次反转
$result = array_reverse($unique);

print_r($result);

输出:

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

方法2:使用array_flip()array_keys()

  1. 使用array_flip()将数组的键和值交换,这样重复的值会被覆盖,保留最后一个出现的值。
  2. 使用array_keys()获取去重后的键。
$array = [1, 2, 3, 2, 4, 3, 5];

// 交换键值
$flipped = array_flip($array);

// 获取去重后的键
$result = array_keys($flipped);

print_r($result);

输出:

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

方法3:手动遍历数组

你可以手动遍历数组,使用一个辅助数组来记录已经出现的值,并保留最后一个出现的元素。

$array = [1, 2, 3, 2, 4, 3, 5];
$result = [];
$seen = [];

foreach ($array as $value) {
    if (isset($seen[$value])) {
        unset($result[$seen[$value]]);
    }
    $seen[$value] = count($result);
    $result[] = $value;
}

print_r(array_values($result));

输出:

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

总结

  • 方法1 简单直观,但需要反转数组两次。
  • 方法2 利用了array_flip()的特性,代码简洁。
  • 方法3 手动控制,灵活性高,适合复杂场景。

根据你的需求选择合适的方法即可。