


[パフォーマンスは王様] PHP ソース コードからの array_keys と array_unique の分析、arraykeys_PHP チュートリアル
【パフォーマンスは王様】PHP ソースコード arraykeys からの array_keys と array_unique の分析
この記事では、[翻訳] A Faster Way to Implement PHP Array Deduplication で以前説明しましたが、array_flip を使用して、直接ではなく array_keys 関数を呼び出します。 array_unique の呼び出し この関数により、配列重複排除のパフォーマンスが向上します。元の記事ではソースコードの解析とテストの結果が示されておらず、読者の皆様に混乱を与えてしまったことをお詫び申し上げます。読者の疑問を解決するために、作者はソースコード解析を追加すると約束したので、私は時間をかけて PHP ソースコードを勉強しました。そして今、詳細な手順を追加します。
パフォーマンス分析
実行パフォーマンスの観点から、次のテストコードを見てください:
リーリー
実行結果は以下の通りです:
テスト結果は、array_flip を使用してから array_keys 関数を呼び出す方が、array_unique 関数よりも高速であることを示しています。では、具体的な理由は何でしょうか?これら 2 つの関数が PHP の下部でどのように実装されているかを見てみましょう。
ソースコード解析
リーリー
上記は、array_keys 関数の基礎となるソース コードです。理解を容易にするために、著者はいくつかの中国語のコメントを追加しました。元のコードを表示する必要がある場合は、クリックして表示できます。この関数の機能は、一時的な配列を作成し、キーと値のペアを新しい配列にコピーすることです。コピー処理中に重複したキー値が発生した場合は、それらを新しい値に置き換えます。この関数の主なステップは、57 行目と 63 行目で呼び出される zend_hash_next_index_insert 関数です。この関数は要素を配列に挿入します。重複した値が出現した場合は、新しい値を使用して元のキー値が指す値を更新します。それ以外の場合、時間計算量は O(n) です。
リーリー
上記はarray_flip関数のソースコードです。リンクをクリックして元のコードを表示します。この関数の主な動作は、新しい配列を作成し、元の配列を走査することです。 26 行目で、元の配列の値が新しい配列のキーに割り当てられ、重複がある場合は 37 行目で元の配列のキーが新しい配列の値に割り当てられます。 、古い値は新しい値で上書きされます。関数全体の時間計算量も O(n) です。したがって、array_flip を使用した後に array_keys を使用する場合の時間計算量は O(n) です。
次に、array_unique 関数のソースコードを見てみましょう。リンクをクリックして元のコードを表示します。
リーリー
ご覧のとおり、この関数は新しい配列を初期化し、値を新しい配列にコピーし、45 行目でソート関数を呼び出して配列をソートします。ソート アルゴリズムは、zend のブロック ツリー ソート アルゴリズムです。エンジン。次に、ソートされた配列を反復処理し、重複する要素を削除します。関数全体の中で最も負荷が高い部分はソート関数の呼び出しであり、クイック ソートの時間計算量は O(n*logn) です。したがって、この関数の時間計算量は O(n*logn) です。結論
array_unique の最下層がクイック ソート アルゴリズムを呼び出すため、関数の実行にかかる時間コストが増加し、関数全体の実行が遅くなります。これが、array_keys が array_unique 関数よりも高速である理由です。
限られた文体と限られた知識によるオリジナル記事 記事内に何か間違っている点がございましたら、お知らせください。
この記事が役に立った場合は、「おすすめ」をクリックしてください。記事を書くのは簡単ではありません。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、
