ゆるい比較(array_unique()
)を使用します。これは、基礎となるバイト表現が異なっていても視覚的に同じように見える場合でも、文字列を等しく扱う可能性があります。 これは、同じ文字を表すが異なるエンコードを表す2つの文字列が明確であると見なされ、誤った重複排除につながることを意味します。 逆に、バイト表現がエンコードの違いにより一致する場合、2つの異なる文字列が誤って同一と見なされる可能性があります。したがって、正確な重複排除のためには、一貫した正確なエンコードが重要です。
mb_detect_encoding()
のような関数は、検出のエンコードを支援し、mb_convert_encoding()
は変換を処理できます。 潜在的な変換障害を管理するには、このステップではエラー処理が重要です。Normalizer
クラス(PHP 5.3以降利用可能)をNormalizer::NFKC
フォームで使用します。 これにより、視覚的に同一の文字がバイトレベルで同じように表されることが保証されます。 文字列は一貫してエンコードされ、正規化されているため、array_unique()
array_unique()
SplObjectStorage
offsetSet()
array_flip()
のゆるい比較(array_unique()
)は、視覚的に同一であるが異なるエンコードされた文字列を確実に区別することはなく、誤った重複排除や重複を除去できないことにつながります。 これは、単一の文字が複数のバイトで表される可能性があるマルチバイト文字で特に問題があります。 非常に大きな配列の場合、エンコード検出、変換、および正規化のオーバーヘッドが重要になる可能性があります。 適切な重複排除アルゴリズムを選択する(たとえば、ハッシュテーブルまたはより洗練されたデータ構造を使用するなど)は、スケーラビリティに重要になります。以上がPHPアレイの重複排除は、データをエンコードするために考慮する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。