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> => </span><span><span class="hljs-number">1</span></span><span>,
</span><span><span class="hljs-string">'b'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>,
</span><span><span class="hljs-string">'c'</span></span><span> => </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> => </span><span><span class="hljs-number">10</span></span><span>,
</span><span><span class="hljs-string">'b'</span></span><span> => </span><span><span class="hljs-number">20</span></span><span>,
</span><span><span class="hljs-string">'d'</span></span><span> => </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] => </span><span><span class="hljs-number">1</span></span><span>
[b] => </span><span><span class="hljs-number">2</span></span><span>
)
</span></span>
この例では、 array_intersect_keyは、 $ array1と$ array2のキー名を比較し、同じキー名( 'a'と'b」で要素を返します。
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> => </span><span><span class="hljs-number">1</span></span><span>,
</span><span><span class="hljs-string">'banana'</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>,
</span><span><span class="hljs-string">'cherry'</span></span><span> => </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> => </span><span><span class="hljs-number">10</span></span><span>,
</span><span><span class="hljs-string">'banana'</span></span><span> => </span><span><span class="hljs-number">20</span></span><span>,
</span><span><span class="hljs-string">'date'</span></span><span> => </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] => </span><span><span class="hljs-number">1</span></span><span>
[banana] => </span><span><span class="hljs-number">2</span></span><span>
)
</span></span>
この例では、 array_intersect_ukeyはstrcasecmp関数を使用してキー名を比較し、ケースを無視するため、 「Apple」と「バナナ」は同じキーと見なされます。
特性 | array_intersect_key | array_intersect_ukey |
---|---|---|
比較方法 | キー名を直接比較します | ユーザー定義のコールバック関数を介してカスタムキー名の比較メソッドを許可する |
ユーザー定義の比較 | ユーザー定義の比較はサポートされていません | コールバック関数を介してカスタム比較ルールをサポートします |
シナリオを使用します | ケースまたは複雑な比較ルールを考慮せずに、単純なキー名の比較に適しています | 複雑なルールまたはカスタムルールを必要とするキー名の比較に適しています |
パフォーマンス | シンプルで高い実行効率 | ユーザーコールバック機能が関与しているため、パフォーマンスはarray_intersect_keyよりもわずかに劣る場合があります |
array_intersect_keyは、キー名のカスタム比較を伴わずに複数の配列のキー名を比較するのに適した比較的シンプルで効率的な関数です。
array_intersect_ukeyを使用すると、開発者はカスタムキー名の比較関数を提供できます。これにより、複雑なキー名の比較が必要なシナリオにも柔軟で適していますが、パフォーマンスにも影響を与える可能性があります。
特定のアプリケーション要件に応じて、キー名の比較を処理するための適切な関数を選択できます。直接キー名マッチングのみが必要な場合は、 array_intersect_keyで十分です。より複雑なキー名の比較ロジックが必要な場合、 array_intersect_ukeyはより強力な関数を提供します。