保持数组的唯一值,保留顺序,保留每个的最后一次出现

时间:2013-05-27 16:43:55

标签: php arrays

我有这个数组:

array(0, 3, 4, 3, 6);

我想过滤掉双打,但保留最后结果

array_unique给了我0,3,4,6 ..但我需要它给0,4,3,6(所以它保留最后3个,而不是第一个)

2 个答案:

答案 0 :(得分:7)

反过来说:

// Reverse an array, starting backwards
function array_unique_right($array)
{
  return array_reverse(array_unique(array_reverse($array)));
}

然而,这将不是非常高效。您可能最好创建自己的实现

答案 1 :(得分:3)

这将是一种方式,向后遍历数组:

$arr = array(0, 3, 4, 3, 6);

$res = array();
for ($i = count($arr) - 1; $i >= 0; --$i) {
        $item = $arr[$i];

        if (!isset($res[$item])) {
                $res = array($item => $item) + $res; // unshift
        }
}
print_r(array_values($res));

我通过使用中间映射在速度和内存之间进行了权衡,因此可以使用isset(),从中可以剥离值(或键)以形成最终结果。

<强>更新

当数组变大时,它优于双array_reverse()array_unique()方法,所以它毕竟不是那么糟糕:)