我有这个数组:
array(0, 3, 4, 3, 6);
我想过滤掉双打,但保留最后结果
array_unique
给了我0,3,4,6 ..但我需要它给0,4,3,6(所以它保留最后3个,而不是第一个)
答案 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()
方法,所以它毕竟不是那么糟糕:)