【PHP8.x】array_uintersect_uassoc関数の使い方
array_uintersect_uassoc関数は、複数の配列に共通して存在する要素を、ユーザーが指定した比較ルールに基づいて抽出する関数です。この関数は、与えられた最初の配列から、続くすべての配列にキーと値の両方が一致する要素を探し出して、新しい配列として返します。
最大の特徴は、要素の値とキー、それぞれの比較ロジックを開発者自身が柔軟に定義できる点です。具体的には、要素の値の比較に使用するコールバック関数と、要素のキーの比較に使用するコールバック関数を、それぞれ個別に指定します。これらのコールバック関数は、比較対象の二つの要素を受け取り、その相対的な順序(小さい、等しい、大きい)を示す整数値(負の数、0、正の数)を返す必要があります。これにより、単なる厳密な等価性(==
や===
)だけでなく、例えばオブジェクトの特定のプロパティの値で比較したり、大文字小文字を区別しない文字列比較を行ったりと、標準の比較では実現できない複雑な条件での共通要素抽出が可能になります。
結果として得られる配列には、共通と判断された要素が最初の配列で使用されていた元のキーと値のペアを保ったまま含まれます。複数の配列から、独自の基準でキーと値の両方を比較して共通部分を特定したい場合に、非常に強力で柔軟なツールとして利用できます。
基本的な使い方
構文(syntax)
<?php
$array1 = ["a" => "green", "b" => "brown", "c" => "blue"];
$array2 = ["A" => "green", "B" => "yellow", "C" => "blue"];
$result = array_uintersect_uassoc(
$array1,
$array2,
// 値を比較するためのユーザー定義コールバック関数
fn(string $value1, string $value2): int => $value1 <=> $value2,
// キーを比較するためのユーザー定義コールバック関数 (大文字小文字を区別しない)
fn(string $key1, string $key2): int => strcasecmp($key1, $key2)
);
print_r($result);
/*
Array
(
[a] => green
[c] => blue
)
*/
?>
引数(parameters)
array $array, array ...$arrays, callable $value_compare_func, callable $key_compare_func
- array $array: 比較対象の配列
- array ...$arrays: 比較対象となる追加の配列
- callable $value_compare_func: 値を比較するためのコールバック関数
- callable $key_compare_func: キーを比較するためのコールバック関数
戻り値(return)
array
指定された条件に基づいて、PHP 8.4 の array_uintersect_uassoc
関数の戻り値の説明を生成します。
指定された2つの配列に共通して存在する要素を、ユーザー定義の比較関数とキー比較関数を用いて抽出した新しい配列を返します。