2013-05-27 131 views
2

最后一次出现我有此数组:保持阵列的独特价值,维持秩序,保持各

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

我想筛选出一倍,但保留最后结果

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

+1

1)实现自己的功能,或2)逆转阵列之前和之后。 – deceze

+1

@deceze太糟糕了,没有'array_reduce_right()':) –

+1

@Jack https://github.com/lstrojny/functional-php:-3 – deceze

回答

7

它给0,4,3,6只是扭转这种局面:

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

然而,这不会很高性能。你可能会更好创建自己的实现

+2

+1。但是''array_reverse'函数中缺少s。 :) –

+1

+1,但'array_unique_right'可能是一个更好的名字。 :) – deceze

+1

编辑 - 谢谢两个:-)。 – Ven

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()方法作为数组变大,所以它不是那么糟糕毕竟:)

+0

+1。请分享基准:) – arnaud576875

+1

@ arnaud576875 https://gist.github.com/datibbaw/260772aef07957393092 - 基准测试代码本身正在进行中;-) –