PHPのお勉強!

PHP TOP

array_diff_uassoc

(PHP 5, PHP 7, PHP 8)

array_diff_uassoc ユーザーが指定したコールバック関数を利用し、 追加された添字の確認を含めて配列の差を計算する

説明

array_diff_uassoc(array $array, array ...$arrays, callable $key_compare_func): array

array のキーを arrays のキーと比較し、その差を返します。 この関数は array_diff() に似ていますが、 配列のキーを用いて比較するという点が異なります。

array_diff_assoc() とは異なり、 内部関数ではなくユーザーが指定したコールバック関数を用いて添字を比較します。

パラメータ

array

比較元の配列。

arrays

比較する対象となる配列。

key_compare_func

比較関数は、最初の引数と二番目の引数の比較結果を返します。最初の引数のほうが二番目の引数より大きい場合は正の整数を、二番目の引数と等しい場合はゼロを、そして二番目の引数より小さい場合は負の整数を返す必要があります。

callback(mixed $a, mixed $b): int
警告

float のような 非整数 を比較関数が返すと、その返り値を内部的に int にキャストして使います。 つまり、0.990.1 といった値は整数値 0 にキャストされ、 値が等しいとみなされます。

戻り値

array の要素のうち、 その他の配列のいずれにも含まれないものだけを残した配列を返します。

例1 array_diff_uassoc() の例

この例では、"a" => "green" の組み合わせが両方の配列に存在し、 関数の出力には存在しないことが確認できます。 これとは異なり、0 => "red" は出力されています。 これは、最初の配列の "red" のキーには自動的に 0 が割り当てられる一方で、 二番目の配列では 0 には既に yellow というキーがあるため、 "red" には 1 が割り当てられるためです。

<?php
function key_compare_func($a, $b)
{
if (
$a === $b) {
return
0;
}
return (
$a > $b)? 1:-1;
}

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_uassoc($array1, $array2, "key_compare_func");
print_r($result);
?>

上の例の出力は以下となります。

Array
(
    [b] => brown
    [c] => blue
    [0] => red
)

2 つのインデックスが等しいかどうかは、 ユーザーが指定したコールバック関数で調べます。

注意

注意:

この関数は n 次元配列の一つの次元しかチェックしません。 array_diff_uassoc($array1[0], $array2[0], "key_compare_func"); のようにすることで、より深い次元でのチェックもできます。

参考

  • array_diff() - 配列の差を計算する
  • array_diff_assoc() - 追加された添字の確認を含めて配列の差を計算する
  • array_udiff() - データの比較にコールバック関数を用い、配列の差を計算する
  • array_udiff_assoc() - データの比較にコールバック関数を用い、 追加された添字の確認を含めて配列の差を計算する
  • array_udiff_uassoc() - データと添字の比較にコールバック関数を用い、 追加された添字の確認を含めて配列の差を計算する
  • array_intersect() - 配列の共通項を計算する
  • array_intersect_assoc() - 追加された添字の確認も含めて配列の共通項を確認する
  • array_uintersect() - データの比較にコールバック関数を用い、配列の共通項を計算する
  • array_uintersect_assoc() - データの比較にコールバック関数を用い、 追加された添字の確認も含めて配列の共通項を計算する
  • array_uintersect_uassoc() - データと添字の比較に個別のコールバック関数を用い、 追加された添字の確認も含めて配列の共通項を計算する

add a note

User Contributed Notes 1 note

up
1
MD. ABU SAYEM
10 years ago
//array_diff_uassoc for multidimenssional array
$color_1=array('a'=>'white','b'=>'red','c'=>array('a'=>'green','b'=>'blue','c'=>'yellow'));
$color_2=array('a'=>'white','b'=>'red','c'=>array('a'=>'white','b'=>'red','c'=>'yellow'));

function key_compare($a,$b){
if($a===$b) return 0;
return($a>$b)?1:-1;
}
print_r(array_diff_uassoc($color_1['c'], $color_2['c'],"key_compare"));

//Output
Array
(
[a] => green
[b] => blue
)