これは私の以前の質問の 1 つを参照しています: array_unique vs array_flip - これは、単純な文字列と整数を扱う場合array_flip(array_flip())
よりもはるかに高速であることを示しています。array_unique()
私が知りたいのはarray_unique()
、配列のコピーを作成し、並べ替えてから重複を削除する理由です
両方の関数のソースは、こちらから入手できます。
前もって感謝します!
これは私の以前の質問の 1 つを参照しています: array_unique vs array_flip - これは、単純な文字列と整数を扱う場合array_flip(array_flip())
よりもはるかに高速であることを示しています。array_unique()
私が知りたいのはarray_unique()
、配列のコピーを作成し、並べ替えてから重複を削除する理由です
両方の関数のソースは、こちらから入手できます。
前もって感謝します!
アルゴリズム的に考えると、重複を削除する方法は、リストを調べて、見つけたアイテムを追跡し、「見つかった」リストに既にあるものを取り除くことです。これを実現する簡単な方法の 1 つは、リストをソートすることです。そうすれば、重複を効率的に削除する場所が明確になります。コンピューターは言うまでもなく、あなたのことを考えてみてください。これらのリストのうち、重複を削除しやすいのはどれですか?
apple
banana
cantaloupe
apple
durian
apple
banana
cantaloupe
また
apple
apple
apple
banana
banana
cantaloupe
cantaloupe
durian
編集:少し調べた後(そしてこの記事を見つけた後)、2つが両方とも仕事を成し遂げているように見えますが、機能的に同等ではないか、少なくとも常にそうではありません. これらのポイントのいくつかを言い換えると:
重複を削除する前に配列をソートする理由について、 Dan Fegoがすばらしい回答をしたと思います。ただし、何が機能するかを調べたいと思いarray_flip()
ます。説明するために、次の配列を使用します。
'a' => 'apple'
'b' => 'banana'
'c' => 'apple'
'd' => 'date'
array_flip()
生成するキーと値を交換します
'apple' => 'a'
'banana' => 'b'
'apple' => 'c'
'date' => 'd'
ただし、キーは一意である必要があります。マニュアルでは、これarray_flip()
を処理する方法について説明しています。
値に複数のオカレンスがある場合、最新のキーがその値として使用され、その他はすべて失われます。
したがって、次のようになります。
'banana' => 'b'
'apple' => 'c'
'date' => 'd'
したがって、使用すると次のようarray_flip(array_flip())
になります。
'b' => 'banana'
'c' => 'apple'
'd' => 'date'
の背後にある動機については、array_unique()
Rasmus Lerdorf または現在 PHP 開発に取り組んでいる誰かが答えようとしない限り、推測することしかできません。