【PHP8.x】array_diff_assoc関数の使い方
array_diff_assoc関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
array_diff_assoc関数は、最初の配列に含まれており、かつ他のどの配列にもキーと値のペアが一致しない要素を検出して、その差分を新しい配列として返す関数です。この関数は、比較対象となるすべての配列において、キーと値の両方が一致しない場合にのみ、最初の配列のその要素を差分と判断します。例えば、ある商品リストから、他の在庫リストにはない商品を特定したい場合などに有効です。
基本的な使い方は、比較の基準となる配列を最初の引数に、比較対象となる一つまたは複数の配列を続けて引数として渡します。戻り値は、最初の配列から、他の配列との比較によって見つかった異なる要素のみを含む新しい配列となります。この際、要素の比較は非厳密な方式(==演算子に相当)で行われます。つまり、型が異なっていても値が同じであれば等しいと判断されます。
例えば、['a' => 1, 'b' => 2, 'c' => 3] と ['b' => 2, 'd' => 4] を比較した場合、最初の配列にはキーaと値1のペア、およびキーcと値3のペアが存在し、これらは二番目の配列にはキーと値の両方が一致する要素として存在しません。そのため、これらの要素が結果の配列に含まれます。キーのみが異なっていても、値のみが異なっていても、あるいはキーも値も異なっていても、最初の配列にしか存在しない要素であれば差分として認識されます。この関数を使用することで、配列の内容を厳密に比較し、特定の条件で一致しない要素を効率的に抽出することが可能です。
構文(syntax)
1<?php 2$array1 = ["a" => "apple", "b" => "banana", "c" => "cherry"]; 3$array2 = ["a" => "apple", "d" => "date", "b" => "grape"]; 4 5$result = array_diff_assoc($array1, $array2); 6print_r($result);
引数(parameters)
array $array, array ...$arrays
- array $array: 比較の基準となる配列
- array ...$arrays: $array と比較する1つ以上の配列
戻り値(return)
array
比較対象となる配列から、両方の配列に存在するキーと値のペアを除いた新しい配列を返します。
サンプルコード
PHP array_diff_assoc で配列文字列変換警告
1<?php 2 3/** 4 * array_diff_assoc 関数の動作と、多次元配列を比較しようとした際の 5 * 'Array to string conversion' 警告の発生例を示すサンプルコードです。 6 * 7 * array_diff_assoc は、キーと値の両方が一致しない要素を、最初の配列から検出します。 8 * 値の比較はスカラー値(文字列、数値など)を想定しており、 9 * 配列の要素がさらに配列(多次元配列)である場合、PHPは内部的にその配列を文字列に変換しようとします。 10 * この変換時に 'Array to string conversion' 警告が発生することがあります。 11 */ 12function demonstrateArrayDiffAssocConversionWarning(): void 13{ 14 echo "--- 基本的な array_diff_assoc の動作 (スカラー値の比較) ---\n"; 15 16 $arrayA = [ 17 "id" => 101, 18 "name" => "Apple", 19 "color" => "Red", 20 "price" => 1.50, 21 "category" => "Fruit" 22 ]; 23 24 $arrayB = [ 25 "id" => 101, 26 "name" => "Apple", 27 "size" => "Medium", // arrayAにはないキー 28 "price" => 2.00, // キーは同じだが値が異なる 29 "category" => "Fruit" // キーと値がarrayAと同じ 30 ]; 31 32 echo "最初の配列 (\$arrayA):\n"; 33 print_r($arrayA); 34 echo "比較対象の配列 (\$arrayB):\n"; 35 print_r($arrayB); 36 37 // $arrayA にあって $arrayB にない要素を、キーと値の両方を比較して見つけます。 38 // "id" と "name" と "category" は両方の配列でキーも値も一致するため、差分にはなりません。 39 // "color" は $arrayA にのみ存在します。 40 // "price" はキーは一致しますが、値が異なるため、この要素は $arrayA の差分として残ります。 41 $diffScalarResult = array_diff_assoc($arrayA, $arrayB); 42 43 echo "array_diff_assoc の結果 (スカラー値):\n"; 44 print_r($diffScalarResult); 45 echo "期待される出力: ['color' => 'Red', 'price' => 1.50]\n\n"; 46 47 echo "--- 多次元配列での array_diff_assoc の動作 (Array to string conversion 警告の発生) ---\n"; 48 49 $multiArray1 = [ 50 "product_id" => 201, 51 "product_name" => "Laptop", 52 "specs" => [ // この要素が配列 53 "cpu" => "Intel i7", 54 "ram" => "16GB" 55 ], 56 "status" => "Available" 57 ]; 58 59 $multiArray2 = [ 60 "product_id" => 201, 61 "product_name" => "Laptop", 62 "specs" => [ // この要素も配列 (内容は multiArray1 と同じ) 63 "cpu" => "Intel i7", 64 "ram" => "16GB" 65 ], 66 "status" => "Available" 67 ]; 68 69 echo "最初の多次元配列 (\$multiArray1):\n"; 70 print_r($multiArray1); 71 echo "比較対象の多次元配列 (\$multiArray2):\n"; 72 print_r($multiArray2); 73 74 // array_diff_assoc は配列の要素が配列である場合、 75 // その配列値を文字列に変換しようとします。 76 // PHPは配列を直接文字列に変換できないため、ここで 77 // "Warning: Array to string conversion" が発生します。 78 // 結果として、'specs' のような多次元要素は正しく比較されず、意図しない差分が出ることがあります。 79 $diffMultiDimensionalResult = array_diff_assoc($multiArray1, $multiArray2); 80 81 echo "array_diff_assoc の結果 (多次元配列):\n"; 82 print_r($diffMultiDimensionalResult); 83 echo "↑ 上記で 'Warning: Array to string conversion' が表示されるはずです。\n"; 84 echo "多次元配列の比較には、array_diff_assoc は適していません。\n"; 85 echo "このようなケースでは、array_udiff_assoc とカスタムの比較関数を使用するか、\n"; 86 echo "独自の再帰的な比較関数を実装することを検討してください。\n"; 87} 88 89// サンプル関数を実行します 90demonstrateArrayDiffAssocConversionWarning();
array_diff_assoc関数は、最初の配列に含まれ、かつ比較対象の配列群には含まれない要素を、キーと値の両方を比較して特定し、それらの要素を持つ新しい配列を返します。引数には、まず比較元の配列を一つ指定し、その後ろに比較対象となる一つ以上の配列を渡します。戻り値は、差分が検出された要素だけを含む配列です。
この関数は、数値や文字列などのスカラー値の比較には適切に機能します。例えば、["id" => 101, "name" => "Apple"]のような配列と["id" => 101, "name" => "Orange"]を比較すると、"name"キーの値が異なるため、最初の配列から["name" => "Apple"]が差分として検出されます。
しかし、配列の要素自体がさらに配列(多次元配列)である場合、注意が必要です。array_diff_assoc関数は、配列の要素を比較する際に、その要素が配列であると、内部的に文字列に変換しようとします。PHPでは配列を直接文字列に変換できないため、この処理中に「Warning: Array to string conversion」という警告が発生します。この警告は、比較が期待通りに行われていないことを示唆しており、多次元配列の正確な比較にはarray_diff_assocは適していません。多次元配列を比較する際は、array_udiff_assoc関数と独自の比較関数を使うか、再帰的な比較ロジックを実装することを検討してください。
array_diff_assoc関数は、配列のキーと値が両方一致しない要素を検出する際に利用します。この関数は、値の比較を数値や文字列などのスカラー値で行うことを前提としています。もし比較対象の配列要素に、さらに別の配列(多次元配列)が含まれていた場合、PHPは内部的にその配列を文字列へ変換しようとします。この際、「Warning: Array to string conversion」という警告が発生し、意図した通りの正確な比較が行われないため注意が必要です。多次元配列の比較にはarray_diff_assoc関数は適していません。そのような場合は、array_udiff_assoc関数と独自の比較関数を組み合わせるか、再帰的な比較ロジックを実装することを検討してください。
PHP連想配列の差分をキーと値で比較する
1<?php 2 3/** 4 * array_diff_assoc の使用例を示す関数。 5 * 6 * この関数は、2つ以上の連想配列を比較し、最初の配列にのみ存在する 7 * キーと値のペアを返します。 8 * 9 * 要素が差分とみなされるのは、比較対象のどの配列にも、 10 * 同じキーと全く同じ値を持つ要素が存在しない場合です。 11 * これは、キーと値の両方が一致することを条件に差分を検出するため、 12 * 連想配列の比較において特に重要です。 13 * 14 * @return void 結果を標準出力に出力します。 15 */ 16function demonstrateArrayDiffAssoc(): void 17{ 18 // 最初の比較対象となる連想配列 19 $array1 = [ 20 'id' => 101, 21 'name' => 'Alice', 22 'status' => 'active', 23 'role' => 'admin', 24 ]; 25 26 // 比較対象の2番目の連想配列 27 // 'id' => 101 は $array1 とキーも値も完全に一致する 28 // 'name' => 'Bob' は $array1 とキーは同じだが値が異なる 29 $array2 = [ 30 'id' => 101, 31 'name' => 'Bob', 32 'age' => 30, // $array1には存在しないキー 33 ]; 34 35 // 比較対象の3番目の連想配列 36 // 'status' => 'active' は $array1 とキーも値も完全に一致する 37 // 'role' => 'user' は $array1 とキーは同じだが値が異なる 38 $array3 = [ 39 'status' => 'active', 40 'role' => 'user', 41 'city' => 'Tokyo', // $array1には存在しないキー 42 ]; 43 44 // array_diff_assoc を使用して、$array1 にあって 45 // $array2 および $array3 のどちらにも同じキーと値のペアが存在しない要素を検出します。 46 // 47 // 処理結果の予測: 48 // - 'id' => 101: $array2 に全く同じ要素があるため、結果には含まれない。 49 // - 'name' => 'Alice': $array2 に 'name' => 'Bob' があるが、値が異なるため、結果に含まれる。 50 // - 'status' => 'active': $array3 に全く同じ要素があるため、結果には含まれない。 51 // - 'role' => 'admin': $array3 に 'role' => 'user' があるが、値が異なるため、結果に含まれる。 52 $difference = array_diff_assoc($array1, $array2, $array3); 53 54 echo "--- 比較対象の配列 --- \n"; 55 echo "配列1: " . print_r($array1, true); 56 echo "配列2: " . print_r($array2, true); 57 echo "配列3: " . print_r($array3, true); 58 59 echo "--- array_diff_assoc の結果 ---\n"; 60 echo "配列1に存在し、かつ配列2と配列3のどちらにも全く同じキーと値のペアとして存在しない要素:\n"; 61 print_r($difference); 62} 63 64// 関数を実行して結果を表示 65demonstrateArrayDiffAssoc(); 66
PHPのarray_diff_assoc関数は、複数の連想配列を比較し、最初の配列にのみ存在するキーと値のペアを見つけ出す際に使用されます。この関数は、比較対象の配列が持つキーと値の「両方」が一致しない場合にのみ、差分として扱います。
引数には比較したい配列を複数指定し、最初の引数となる配列($array)と、それに続く一つ以上の配列(...$arrays)を比較します。戻り値は、最初の配列に存在し、かつ他のどの配列にもキーと値の両方が完全に一致する要素が存在しない、新しい連想配列となります。
例えば、サンプルコードでは$array1、$array2、$array3の3つの連想配列を比較しています。array_diff_assoc($array1, $array2, $array3)を実行すると、$array1の要素のうち、$array2にも$array3にも全く同じキーと値のペアが存在しない要素が抽出されます。具体的には、$array1の'name' => 'Alice'は$array2に'name' => 'Bob'がありますが値が異なるため差分として含まれます。また、'role' => 'admin'も$array3に'role' => 'user'がありますが値が異なるため差分として含まれます。一方で'id' => 101は$array2に全く同じ要素が存在し、'status' => 'active'は$array3に全く同じ要素が存在するため、これらは結果には含まれません。このように、array_diff_assocは連想配列において厳密なキーと値の一致を求める差分比較に役立ちます。
array_diff_assoc関数は、最初の配列を基準とし、他の配列と「キーと値の両方が完全に一致する」要素があるかを比較し、最初の配列にのみ存在する要素を返します。キーが同じでも値が異なれば、差分として扱われる点が重要な注意点です。複数の配列を引数に渡した場合、最初の配列の要素が、後続のいずれかの配列に全く同じキーと値のペアとして存在しない場合に結果に含まれます。比較の方向は常に最初の配列から他の配列へ向かいますので、どの配列を最初に指定するかが結果に影響することを理解してお使いください。
PHP array_diff_assocで配列の差分をキーと値で比較する
1<?php 2 3/** 4 * array_diff_assoc関数のサンプルコードです。 5 * この関数は、最初の配列に含まれ、かつ他のどの配列にもキーと値の両方が一致する要素がないものを返します。 6 * 値が配列である場合も、PHPの `==` 演算子に基づいて深く比較されます。 7 * 8 * システムエンジニアを目指す初心者の方へ: 9 * この関数は、2つのデータのセット(配列)を比較して、一方にだけ存在する要素を見つけたい場合に役立ちます。 10 * 特に、キーと値の両方が一致することを確認しながら差分を検出したいときに使用します。 11 * ネストされた配列(多次元配列)を値として持つ場合も、その内容を考慮して比較が行われます。 12 */ 13 14echo "--- 1. スカラー値(文字列や数値など)の比較例 ---\n"; 15 16// 基準となる配列 17$baseArray = ['id' => 1, 'name' => 'Alice', 'role' => 'user', 'status' => 'active']; 18// 比較対象1: 'name'と'status'の値が異なる 19$compareArray1 = ['id' => 1, 'name' => 'Bob', 'role' => 'user', 'status' => 'inactive']; 20// 比較対象2: 'role'のキーが存在しない 21$compareArray2 = ['id' => 1, 'name' => 'Alice', 'status' => 'active']; 22 23// baseArray にあって、compareArray1 または compareArray2 のどちらにも 24// キーと値のペアが完全に一致しない要素を抽出します。 25$resultScalar = array_diff_assoc($baseArray, $compareArray1, $compareArray2); 26 27echo "array_diff_assoc(\$baseArray, \$compareArray1, \$compareArray2) の結果:\n"; 28print_r($resultScalar); 29/* 30期待される出力: 31Array 32( 33 [name] => Alice // baseArray['name']='Alice' は compareArray1['name']='Bob' と異なる。compareArray2['name']='Alice' とは一致するが、compareArray1に存在しないためbaseArrayから残る。 34 [role] => user // baseArray['role']='user' は compareArray1にもあるが、compareArray2には存在しないためbaseArrayから残る。 35 [status] => active // baseArray['status']='active' は compareArray1['status']='inactive' と異なる。 36) 37注意: この例では 'name' と 'role' が残っています。 38'name': baseArray['name'] と compareArray1['name'] が異なるため、compareArray1は一致しないと判断されます。compareArray2['name']とは一致しますが、全ての比較対象で一致する必要があるわけではありません。 39 `array_diff_assoc` は「最初の配列に存在し、かつ他の**いずれの**配列にもキーと値が一致する要素が**ない**」ものを返します。 40 `baseArray['name'] = 'Alice'` は `compareArray1` の `'name' = 'Bob'` と異なるため、`baseArray` からの差分として残ります。 41'role': baseArray['role'] = 'user' は compareArray1['role'] = 'user' と一致します。しかし、compareArray2には'role'というキーがありません。 42 この場合、`baseArray['role']` は `compareArray2` の中にはそのキーと値のペアがないと判断されるため、結果に残ります。 43 => 訂正: array_diff_assoc は、`array1` にあって、`array2, ...` の**いずれか**にでもキーと値が一致する要素があれば、`array1` からその要素は除外されます。 44 従って、`baseArray['name'] = 'Alice'` は `compareArray2['name'] = 'Alice'` と一致するので、結果には残りません。 45 `baseArray['role'] = 'user'` は `compareArray1['role'] = 'user'` と一致するので、結果には残りません。 46 正しくは `baseArray['status']='active'` のみが残るはずです。再確認します。 47 PHP manual for array_diff_assoc: "Returns an array containing all the entries from `array1` that are not present in any of the other arrays." 48 "An entry from `array1` is not present in the other arrays if no entry with the same key and value is found in those arrays." 49 50 Let's re-evaluate: 51 'id' => 1: In baseArray. 52 Is it in compareArray1? Yes, ['id' => 1]. So 'id' is NOT in result. 53 'name' => 'Alice': In baseArray. 54 Is it in compareArray1? No, compareArray1 has ['name' => 'Bob']. 55 Is it in compareArray2? Yes, ['name' => 'Alice']. So 'name' is NOT in result. 56 'role' => 'user': In baseArray. 57 Is it in compareArray1? Yes, ['role' => 'user']. So 'role' is NOT in result. 58 'status' => 'active': In baseArray. 59 Is it in compareArray1? No, compareArray1 has ['status' => 'inactive']. 60 Is it in compareArray2? Yes, ['status' => 'active']. So 'status' is NOT in result. 61 62 My expectation above was wrong, and my code comments were also a bit confusing. 63 If my understanding is correct now, then `array_diff_assoc($baseArray, $compareArray1, $compareArray2)` should yield an empty array `[]` in this scalar case. 64 Let's correct the example slightly to show a non-empty result. 65 66 To make it non-empty, one element in `$baseArray` must *not* have a matching key+value in *any* of the other arrays. 67 Let's remove 'status' from compareArray2. 68 69 $baseArray = ['id' => 1, 'name' => 'Alice', 'role' => 'user', 'status' => 'active']; 70 $compareArray1 = ['id' => 1, 'name' => 'Bob', 'role' => 'user', 'status' => 'inactive']; 71 $compareArray2 = ['id' => 1, 'name' => 'Alice']; // 'status' and 'role' are missing here 72 73 'id' => 1: In baseArray. 74 In compareArray1? Yes. -> NOT in result. 75 'name' => 'Alice': In baseArray. 76 In compareArray1? No (value 'Bob'). 77 In compareArray2? Yes (value 'Alice'). -> NOT in result. 78 'role' => 'user': In baseArray. 79 In compareArray1? Yes. -> NOT in result. 80 'status' => 'active': In baseArray. 81 In compareArray1? No (value 'inactive'). 82 In compareArray2? No (key 'status' missing). -> IN result. 83 84 This way, only 'status' => 'active' should remain. This makes more sense for "not present in any of the other arrays". 85 86 Let's adjust the example arrays to better illustrate this principle. 87 $baseArray = ['a' => 1, 'b' => 2, 'c' => 3]; 88 $compareArray1 = ['a' => 1, 'b' => 5, 'd' => 4]; 89 $compareArray2 = ['a' => 1, 'c' => 3]; 90 91 'a' => 1: In baseArray. 92 In compareArray1? Yes. -> NOT in result. 93 'b' => 2: In baseArray. 94 In compareArray1? No ('b' => 5). 95 In compareArray2? No (key 'b' missing). -> IN result. 96 'c' => 3: In baseArray. 97 In compareArray1? No (key 'c' missing). 98 In compareArray2? Yes. -> NOT in result. 99 100 So, only ['b' => 2] should be the result. This is a clearer example for a beginner. 101 102*/ 103$baseArrayScalar = ['apple' => 1, 'banana' => 2, 'cherry' => 3]; 104$otherArray1Scalar = ['apple' => 1, 'banana' => 99, 'date' => 4]; // 'banana' の値が異なる 105$otherArray2Scalar = ['apple' => 1, 'cherry' => 3]; // 'banana' のキーがない 106 107// 'apple' => 1 は両方の比較対象にあるため除外。 108// 'banana' => 2 は otherArray1Scalar と値が異なり、otherArray2Scalar にはキーがないため、結果に残る。 109// 'cherry' => 3 は otherArray2Scalar にあるため除外。 110$resultScalar = array_diff_assoc($baseArrayScalar, $otherArray1Scalar, $otherArray2Scalar); 111 112echo "array_diff_assoc(\$baseArrayScalar, \$otherArray1Scalar, \$otherArray2Scalar) の結果:\n"; 113print_r($resultScalar); 114/* 115期待される出力: 116Array 117( 118 [banana] => 2 119) 120*/ 121 122echo "\n--- 2. 多次元配列(ネストされた配列)の比較例 ---\n"; 123 124// 基準となる多次元配列 125$baseMultidim = [ 126 'id' => 101, 127 'details' => ['name' => 'ProductA', 'price' => 29.99], 128 'tags' => ['electronics', 'gadget'] 129]; 130 131// 比較対象1: 'details'内の'price'と'tags'の内容が異なる 132$compareMultidim1 = [ 133 'id' => 101, 134 'details' => ['name' => 'ProductA', 'price' => 35.00], // priceが異なる 135 'tags' => ['electronics', 'accessory'] // 内容が異なる 136]; 137 138// 比較対象2: 'details'の内容は一致するが、'tags'のキーがない 139$compareMultidim2 = [ 140 'id' => 101, 141 'details' => ['name' => 'ProductA', 'price' => 29.99] // 'details'は完全に一致 142]; 143 144// baseMultidim にあって、compareMultidim1 または compareMultidim2 のどちらにも 145// キーと値のペアが完全に一致しない要素を抽出します。 146$resultMultidim = array_diff_assoc($baseMultidim, $compareMultidim1, $compareMultidim2); 147 148echo "array_diff_assoc(\$baseMultidim, \$compareMultidim1, \$compareMultidim2) の結果:\n"; 149print_r($resultMultidim); 150/* 151期待される出力: 152Array 153( 154 [details] => Array // baseMultidim['details'] は compareMultidim1['details'] と値が異なる。 155 // compareMultidim2['details'] とは値が一致するため、本来は除外されるはずですが... 156 // Wait, my understanding of "not present in any of the other arrays" might be consistently flawed. 157 // Let's re-read the manual carefully: 158 // "Returns an array containing all the entries from array1 that are not present in any of the other arrays." 159 // "An entry from array1 is not present in the other arrays if no entry with the same key and value is found in those arrays." 160 // This means: if $A['key'] === $B['key'] && $A['value'] === $B['value'] for ANY $B, then $A['key'] is NOT returned. 161 162 // Let's re-evaluate again. 163 // 'id' => 101: 164 // - Present in $compareMultidim1? Yes. -> NOT in result. 165 // 'details' => ['name' => 'ProductA', 'price' => 29.99]: 166 // - Present in $compareMultidim1? No (price is different). 167 // - Present in $compareMultidim2? Yes. -> NOT in result. 168 // 'tags' => ['electronics', 'gadget']: 169 // - Present in $compareMultidim1? No (contents different). 170 // - Present in $compareMultidim2? No (key missing). -> IN result. 171 172 // Based on this, only 'tags' should remain in the result. 173 // My previous comments and expectations were incorrect for array_diff_assoc. 174 // This is a common point of confusion for beginners and for myself when not paying close attention to the definition. 175 // This makes the example very valuable! 176 177) 178*/ 179// 正しい期待値に沿ってコメントを修正します。 180// 'id' => 101: baseMultidim と compareMultidim1/compareMultidim2 の両方にキーと値が一致する要素があるため、結果から除外されます。 181// 'details' => ['name' => 'ProductA', 'price' => 29.99]: 182// compareMultidim1 とは値が異なりますが、compareMultidim2 とは完全に一致するため、結果から除外されます。 183// 'tags' => ['electronics', 'gadget']: 184// compareMultidim1 とは値が異なります。 185// compareMultidim2 には 'tags' キー自体が存在しないため、一致する要素がありません。 186// したがって、この要素は結果に残ります。 187/* 188期待される出力: 189Array 190( 191 [tags] => Array 192 ( 193 [0] => electronics 194 [1] => gadget 195 ) 196) 197*/
PHPのarray_diff_assoc関数は、複数の配列を比較し、最初の配列にのみ存在する要素をキーと値の両方で特定する際に使用されます。この関数は、最初の引数に指定された配列を基準とし、その後に続く一つ以上の配列と比較を行います。戻り値は配列で、基準となる最初の配列の要素のうち、他のどの比較対象配列にもキーと値が完全に一致する要素が見つからなかったものだけが含まれます。
具体的には、基準となる配列のあるキーと値のペアが、比較対象のいずれかの配列に同じキーと値のペアとして存在すれば、その要素は結果に含まれません。逆に、基準配列の要素が結果に含まれるのは、全ての比較対象配列に対して、そのキーと値のペアが全く存在しない場合のみです。値が配列である多次元配列の要素についても、PHPの厳密な比較ルールに基づき、キーと値の両方が深く比較されます。システムエンジニアを目指す初心者の方にとって、複数のデータセットの厳密な差分を検出し、一方のデータセットにだけ存在する特定の情報を効率的に抽出したい場合に、この関数は非常に役立ちます。
array_diff_assoc関数は、最初の配列に存在する要素のうち、他のいずれの比較対象配列ともキーと値が両方完全に一致しないものだけを抽出します。複数の比較対象配列がある場合、そのどれか一つでもキーと値が一致する要素があれば、最初の配列からその要素は除外されるため注意が必要です。値が配列(多次元配列)である場合も、PHPの==演算子(緩やかな比較)に基づいてその内容が再帰的に比較されます。そのため、ネストされた配列の内容まで含めてキーと値の厳密な差分検出を行いたい場合に有効です。