array_intersect_ukey - ユーザー定義のアルゴリズムで、複数の配列の中の共通のキー名を確認する
array_intersect_ukeyは、複数の配列の中から共通のキーを見つける関数です。判定を、ユーザーが定義したアルゴリズムで行ないます。
構文
array array_intersect_ukey ( array $array1 , array $array2 [, array $... ], callable $key_compare_func )
パラメータ
$array1
基本の配列。
$array2
比較対象となる配列。
$...
比較対象となる配列は1つだけじゃなく、第3引数以降で指定できる。
$key_compare_func
int callback ( mixed $a, mixed $b )
差異を判定するための比較関数を最後の引数として指定する。このコールバック関数は比較対象の2つの値を受け取る。関数が0を返した時に同じ、0以外を返した時に違う、と判定される。
返り値
array
第1引数の配列にはあって、第2引数以降に指定した配列にはないキーの要素を集めた配列。
サンプルコード
<?php
$array1 = [
"a" => "red",
"b" => "green",
"c" => "purple",
] ;
$array2 = [
"d" => "red",
"b" => "green",
"f" => "purple",
] ;
function key_compare_func( $a, $b ) {
return 0 ;
}
$response = array_intersect_ukey( $array1, $array2, "key_compare_func" ) ;
デモ
コールバック関数には、"a"
と"d"
、"a"
と"e"
、といったように比較対象の2つのキーが渡され、結果を出すのに必要なだけ、関数が実行されます。関数が0
を返すと、2つのキーは同じだと判定されます。物は試しに、必ず0
を返す関数を指定してみます。すると、結果は全て同じキーだと判定されます。
<?php
/*** このコードは編集できます。 ***/
$array1 = [
"a" => "red",
"b" => "green",
"c" => "purple",
] ;
$array2 = [
"d" => "red",
"b" => "green",
"f" => "purple",
] ;
function key_compare_func( $a, $b ) {
return 0 ;
}
$response = array_intersect_ukey( $array1, $array2, "key_compare_func" ) ;
var_dump( $response ) ;
今度は必ず0以外を返してみます。すると、全てのキーは同じじゃない、と判定されます。
<?php
/*** このコードは編集できます。 ***/
$array1 = [
"a" => "red",
"b" => "green",
"c" => "purple",
] ;
$array2 = [
"d" => "red",
"b" => "green",
"f" => "purple",
] ;
function key_compare_func( $a, $b ) {
return 1 ;
}
$response = array_intersect_ukey( $array1, $array2, "key_compare_func" ) ;
var_dump( $response ) ;
"a"
と"d"
を同じものだと判定する関数にしてみましょう。すると、"a"
と"d"
は違うキーなのに、同じキーだと判定されて結果に含まれます。このように、独自のルールで差異を判定したい時に便利です。
<?php
/*** このコードは編集できます。 ***/
$array1 = [
"a" => "red",
"b" => "green",
"c" => "purple",
] ;
$array2 = [
"d" => "red",
"b" => "green",
"f" => "purple",
] ;
function key_compare_func( $a, $b ) {
// "a"は"d"と同じ扱い
if( $a == "a" ) $a = "d" ;
if( $b == "a" ) $b = "d" ;
// 他は自然な処理
if( $a == $b ) {
return 0 ;
} else {
return $a > $b ? 1 : -1 ;
}
}
$response = array_intersect_ukey( $array1, $array2, "key_compare_func" ) ;
var_dump( $response ) ;
参考
- PHP: array_intersect_ukey
- PHPの公式リファレンス。
関連記事
- array_diff_ukey
- ユーザー定義のアルゴリズムで、配列のキーの差異を確認する。
- array_intersect_uassoc
- ユーザー定義のアルゴリズムで、複数の配列の中から共通の要素を確認する。
- array_udiff
- ユーザー定義のアルゴリズムで、配列の値の差異を確認する。
- array_udiff_uassoc
- ユーザー定義のアルゴリズムで、配列の要素の差異を確認する。
- array_uintersect
- ユーザー定義のアルゴリズムで、複数の配列の中の共通の値を確認する。
- array_diff_assoc
- 配列の要素の差異を確認する。