現在の位置: ホーム> 最新記事一覧> array_intersect_ukeyとarray_intersect_keyの違いは何ですか?詳細な比較と分析

array_intersect_ukeyとarray_intersect_keyの違いは何ですか?詳細な比較と分析

gitbox 2025-06-25

1。array_intersect_key関数の紹介

array_intersect_key関数は、複数の配列のキー名と同じキー名で要素を返すために使用されます。配列の値を比較するのではなく、キー名に基づいて一致するだけです。

関数定義:
 <span><span><span class="hljs-title function_ invoke__">array_intersect_key</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> ...</span><span><span class="hljs-variable">$arrays</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
パラメーター:
  • $ array1 :他の配列と比較するために使用される最初の配列。

  • $ array2$ array1と比較するキーを含む2番目の配列。

  • 追加の配列(オプション):複数の比較のために複数の配列を渡すことができます。

返品値:

他の配列と同じキー名を持つすべての要素を含む配列を返します。

例:
 <span><span><span class="hljs-variable">$array1</span></span><span> = [
    </span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>,
    </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>,
    </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>
];

</span><span><span class="hljs-variable">$array2</span></span><span> = [
    </span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">10</span></span><span>,
    </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">20</span></span><span>,
    </span><span><span class="hljs-string">'d'</span></span><span> =&gt; </span><span><span class="hljs-number">30</span></span><span>
];

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_intersect_key</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

出力:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [a] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [b] =&gt; </span><span><span class="hljs-number">2</span></span><span>
)
</span></span>

この例では、 array_intersect_keyは$ array1$ array2のキー名を比較し、同じキー名( 'a''b」で要素を返します。

2。array_intersect_ukey関数の紹介

array_intersect_keyと同様に、 array_intersect_ukeyは、配列のキー名に基づいて比較するためにも使用されます。唯一の違いは、ユーザー定義のコールバック関数を提供してカスタムキー名の比較を実行できることです。

関数定義:
 <span><span><span class="hljs-title function_ invoke__">array_intersect_ukey</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$key_compare_func</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> ...</span><span><span class="hljs-variable">$arrays</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
パラメーター:
  • $ array1 :他の配列と比較するために使用される最初の配列。

  • $ array2$ array1と比較するキーを含む2番目の配列。

  • $ key_compare_func :キー名を比較するユーザー定義のコールバック関数。この関数は、2つのキー名をパラメーターとして受け取り、整数値を返します。最初のキーが2番目のキー以下または大きい場合、それぞれ負、ゼロ、または正の数を返します。

  • 追加の配列(オプション):複数の比較のために複数の配列を渡すことができます。

返品値:

ユーザー定義のキー名比較関数条件を満たすすべての要素を含む配列を返します。

例:
 <span><span><span class="hljs-variable">$array1</span></span><span> = [
    </span><span><span class="hljs-string">'apple'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>,
    </span><span><span class="hljs-string">'banana'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>,
    </span><span><span class="hljs-string">'cherry'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>
];

</span><span><span class="hljs-variable">$array2</span></span><span> = [
    </span><span><span class="hljs-string">'apple'</span></span><span> =&gt; </span><span><span class="hljs-number">10</span></span><span>,
    </span><span><span class="hljs-string">'banana'</span></span><span> =&gt; </span><span><span class="hljs-number">20</span></span><span>,
    </span><span><span class="hljs-string">'date'</span></span><span> =&gt; </span><span><span class="hljs-number">30</span></span><span>
];

</span><span><span class="hljs-variable">$key_compare_func</span></span><span> = </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$key1</span></span></span><span>, </span><span><span class="hljs-variable">$key2</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strcasecmp</span></span><span>(</span><span><span class="hljs-variable">$key1</span></span><span>, </span><span><span class="hljs-variable">$key2</span></span><span>); </span><span><span class="hljs-comment">// 比較のためにケースを無視します</span></span><span>
};

</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_intersect_ukey</span></span><span>(</span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-variable">$array2</span></span><span>, </span><span><span class="hljs-variable">$key_compare_func</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

出力:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [apple] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [banana] =&gt; </span><span><span class="hljs-number">2</span></span><span>
)
</span></span>

この例では、 array_intersect_ukeyはstrcasecmp関数を使用してキー名を比較し、ケースを無視するため、 「Apple」「バナナ」は同じキーと見なされます。

3。大きな違いと比較

特性array_intersect_key array_intersect_ukey
比較方法キー名を直接比較しますユーザー定義のコールバック関数を介してカスタムキー名の比較メソッドを許可する
ユーザー定義の比較ユーザー定義の比較はサポートされていませんコールバック関数を介してカスタム比較ルールをサポートします
シナリオを使用しますケースまたは複雑な比較ルールを考慮せずに、単純なキー名の比較に適しています複雑なルールまたはカスタムルールを必要とするキー名の比較に適しています
パフォーマンスシンプルで高い実行効率ユーザーコールバック機能が関与しているため、パフォーマンスはarray_intersect_keyよりもわずかに劣る場合があります

4。概要

  • array_intersect_keyは、キー名のカスタム比較を伴わずに複数の配列のキー名を比較するのに適した比較的シンプルで効率的な関数です。

  • array_intersect_ukeyを使用すると、開発者はカスタムキー名の比較関数を提供できます。これにより、複雑なキー名の比較が必要なシナリオにも柔軟で適していますが、パフォーマンスにも影響を与える可能性があります。

特定のアプリケーション要件に応じて、キー名の比較を処理するための適切な関数を選択できます。直接キー名マッチングのみが必要な場合は、 array_intersect_keyで十分です。より複雑なキー名の比較ロジックが必要な場合、 array_intersect_ukeyはより強力な関数を提供します。