PHPでは、Arrayの交差点を扱う多くの関数があり、その中にはarray_interect_assocおよびarray_intersect_uassocは、しばしば混乱しているが非常に類似した関数を持っている2つの関数です。それらはすべて複数の配列の交差を計算するために使用されますが、配列キー(キー)を比較すると異なる動作をします。この記事では、これら2つの機能の違いを詳細に説明し、実用的な提案をします。
array_intersect_assoc(array $ array1、array $ array2、array ... $ array):array
配列の交差点を計算し、比較時に値(値)を考慮するだけでなく、キーを厳密に比較します。重要な比較は、PHP(つまり== )を使用したデフォルトの平等判断です。
array_intersect_uassoc(array $ array1、array $ array2、array ... $ array、callable $ key_compare_func):array
array_intersect_assocと同様ですが、キーの比較では、デフォルトの等式比較の代わりに、ユーザー定義のコールバック関数$ key_compare_funcを使用します。
特徴 | array_intersect_assoc | array_intersect_uassoc |
---|---|---|
値を比較します | はい | はい |
比較キー | はい | はい |
キーを比較する方法 | デフォルトのキー比較(==) | 比較のためのユーザー定義のコールバック関数 |
カスタム比較をサポートするかどうか | いいえ | はい |
使用例 | 比較関数に合格する必要はありません | 比較キーに渡す必要があるコールバック関数 |
<?php
$array1 = ["a" => "green", "b" => "brown", "c" => "blue", "1" => "red"];
$array2 = ["a" => "green", "1" => "red", "b" => "brown", "c" => "blue"];
// array_intersect_assoc キーと値を直接比較します
$result_assoc = array_intersect_assoc($array1, $array2);
// 出力結果:["a" => "green", "b" => "brown", "c" => "blue"]
print_r($result_assoc);
// カスタム比較関数,キーを比較するときの症例感度
function key_compare_func($key1, $key2) {
return strcmp($key1, $key2);
}
$array3 = ["A" => "green", "b" => "brown", "c" => "blue"];
$result_uassoc = array_intersect_uassoc($array1, $array3, "key_compare_func");
// 出力結果:["b" => "brown", "c" => "blue"]
print_r($result_uassoc);
?>
アレイキーと値を比較するだけで、カスタムルール(ケース非感受性、タイプ変換など)を必要としない場合、簡潔で効率的な選択です。
array_intersect_uassocを使用してください:
キーの比較方法に特別なニーズが必要な場合:
大文字と小文字を区別
より複雑な比較ロジックが必要です
比較キーは、カスタムオブジェクトまたは複雑なタイプです
現時点では、コールバック関数を渡すことにより、柔軟なキー比較ルールを実装できます。
array_intersect_assocは、デフォルトのキー値の比較に基づいた配列交差点です。
array_intersect_uassocは、より柔軟なキー比較メカニズムを提供し、ユーザーが比較ロジックをカスタマイズできるようにします。
ビジネスニーズに基づいてカスタムキーを比較する必要があるかどうかを決定すると、適切な関数を選択すると、より堅牢で保守可能なコードを書き込むことができます。