5

私はこの配列を持っています:

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

そして、ダブルスを除外したいが、最後の結果を保持したい

array_unique0, 3, 4, 6.. が得られますが、0, 4, 3, 6 を与える必要があります (最初の 3 ではなく最後の 3 を保持する必要があります)。

4

2 に答える 2

9

逆にするだけです:

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

ただし、それはあまりパフォーマンスが高くありません。独自の実装を作成する方がよい場合があります

于 2013-05-27T16:47:00.633 に答える
3

これは、配列を後方にトラバースする 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()アプローチよりも優れているので、結局それほど悪くはありません:)

于 2013-05-27T16:58:59.893 に答える