I have this array:
array(0, 3, 4, 3, 6);
And I want to filter out doubles, but keep the last result
array_unique
gives me 0, 3, 4, 6.. but I need it to give 0, 4, 3, 6 (so it keeps the last 3, instead of the first)
只需反转它:
// Reverse an array, starting backwards
function array_unique_end($array)
{
return array_reverse(array_unique(array_reverse($array)));
}
然而,这不会非常高效。您最好创建自己的实现
这将是一种方式,向后遍历数组:
$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()
可以使用它,从中剥离值(或键)以形成最终结果。
更新
随着数组变大,它的性能优于 doublearray_reverse()
和array_unique()
方法,所以它毕竟不是那么糟糕 :)