私はこの配列を持っています:
array(0, 3, 4, 3, 6);
そして、ダブルスを除外したいが、最後の結果を保持したい
array_unique
0, 3, 4, 6.. が得られますが、0, 4, 3, 6 を与える必要があります (最初の 3 ではなく最後の 3 を保持する必要があります)。
逆にするだけです:
// Reverse an array, starting backwards
function array_unique_end($array)
{
return array_reverse(array_unique(array_reverse($array)));
}
ただし、それはあまりパフォーマンスが高くありません。独自の実装を作成する方がよい場合があります
これは、配列を後方にトラバースする 1 つの方法です。
$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()
アプローチよりも優れているので、結局それほど悪くはありません:)