array_udiff_assoc - ユーザー定義のアルゴリズムで、配列の要素の差異を確認する
array_udiff_assocは、配列の要素(キーと値の組み合わせ)の差異を調べる関数です。値の方だけ、ユーザー定義のアルゴリズムを使って比較できます。
構文
array array_udiff_assoc ( array $array1 , array $array2 [, array $... ], callable $value_compare_func )
パラメータ
$array1
基本の配列。
$array2
比較対象となる配列。
$...
比較対象となる配列は1つだけではなく、可変引数として第3引数以降に指定できる。
$value_compare_func
int callback ( mixed $a, mixed $b )
差異を判定するための比較関数を最後の引数として指定する。このコールバック関数は比較対象の2つの値を受け取る。関数が0を返した時に同じ、正の数を返した時に第1引数の方が大きい、負の数を返した時に第1引数の方が小さい、と判定される。
返り値
array
第1引数の配列にはあって、第2引数以降に指定した配列にはない要素を集めた配列。
サンプルコード
PHP
<?php
$array1 = [
"a" => 1 ,
"b" => 2 ,
"c" => 3 ,
"d" => 4 ,
] ;
$array2 = [
"a" => 1 ,
"b" => 2 ,
"c" => 5 ,
"e" => 4 ,
] ;
function value_compare_func( $a, $b ) {
// 3と5を同じ扱いにする
if ( $a == 3 ) $a = 5 ;
if ( $b == 3 ) $b = 5 ;
// 他は自然な処理
if ( $a == $b ) {
return 0 ;
} else {
return $a > $b ? 1 : -1 ;
}
}
$response = array_udiff_assoc( $array1, $array2, "value_compare_func" ) ;
デモ
値の3と5を同じ値扱いとして、処理します。本来、"c"=>3
と"c"=>5
は違う要素なのに、結果に含まれません。
<?php
/*** このコードは編集できます。 ***/
$array1 = [
"a" => 1 ,
"b" => 2 ,
"c" => 3 ,
"d" => 4 ,
] ;
$array2 = [
"a" => 1 ,
"b" => 2 ,
"c" => 5 ,
"e" => 4 ,
] ;
function value_compare_func( $a, $b ) {
// 3と5を同じ扱いにする
if ( $a == 3 ) $a = 5 ;
if ( $b == 3 ) $b = 5 ;
// 他は自然な処理
if ( $a == $b ) {
return 0 ;
} else {
return $a > $b ? 1 : -1 ;
}
}
$response = array_udiff_assoc( $array1, $array2, "value_compare_func" ) ;
print_r( $response ) ;
参考
- PHP: array_udiff_assoc
- PHPの公式リファレンス。
関連記事
- array_diff_ukey
- ユーザー定義のアルゴリズムで、配列のキーの差異を確認する。
- array_diff_key
- 配列のキーの差異を確認する。
- array_diff
- 配列の値の差異を確認する。
- array_udiff_uassoc
- ユーザー定義のアルゴリズムで、配列の要素の差異を確認する。
- array_intersect_uassoc
- ユーザー定義のアルゴリズムで、複数の配列の中から共通の要素を確認する。
- array_diff_uassoc
- ユーザー定義のアルゴリズムで、配列の要素の差異を確認する。