array_diff_uassoc()のプロトタイプは次のとおりです。
array array_diff_uassoc ( array $array1 , array $array2 , callable $key_compare_func )
$ array1および$ array2 :比較する2つの配列。
$ key_compare_func :アレイのキーを比較するカスタムコールバック関数。
この関数は、$ array2に一致するキーがない$ array1のすべてのキー価値ペアを含む配列を返します。重要なことに、ここでの比較は、キー名とカスタム比較関数に基づいています。
コールバックfunction key_compare_funcの定義は次のとおりです。
function key_compare_func ($key1, $key2) {
// 比較キーのロジック
}
array_diff_uassoc()では、このコールバック関数はキー名のみを比較し、値とは関係ありません。この機能の目的は、開発者が自分のニーズに応じて配列のキーを比較する方法を定義できるようにすることです。
array_diff_uassoc()は、最初に$ array1と$ array2のキー名を比較します。
$ array1のキー名が$ array2に存在しない場合、またはコールバック関数を介してキー名を比較した結果が不平等である場合、 $ array1のキー値ペアが保持されます。
この比較は完全にキー名に基づいており、値は比較に参加しないことに注意する必要があります。
この行動を理解するには、PHPの設計哲学に戻る必要があります。 array_diff_uassoc()関数の主な目的は、キー名に基づいて配列の違いを計算することです。キー値の違いを同時に考慮した場合、その関数はarray_diff()またはarray_diff_assoc()と重複しています。
設計目的は明確です。Array_diff_uassoc ()の元の意図は、値の違いだけでなく、キー名の違いを比較することです。値の比較関数は、 array_diff()およびarray_diff_assoc()で十分に実装されています。
コールバック関数の制限:コールバックkey_compare_funcは、値ではなくキー名の比較にすぎません。 PHPの設計哲学は、通常、各関数の動作がより明確になるように、各関数を単一のことをさせることです。
効率の考慮事項:コールバック関数がキーと値を同時に比較する場合、関数の実装はより複雑で非効率になる可能性があります。 PHPを使用すると、各関数がキーと値を比較するだけで、タスクを効率的に完了できます。
次の配列があるとします。
$array1 = [
1 => 'apple',
2 => 'banana',
3 => 'cherry',
];
$array2 = [
1 => 'apple',
2 => 'orange',
4 => 'grape',
];
array_diff_uassoc()を使用してそれらを比較する場合、コールバック関数はキー名のみを比較します。
function compare_keys($key1, $key2) {
return $key1 - $key2;
}
$result = array_diff_uassoc($array1, $array2, 'compare_keys');
print_r($result);
出力結果:
Array
(
[3] => cherry
)
この例では、 array_diff_uassoc()は、array $ array1と$ array2のキー名を比較して、 $ array2にないキーを見つけます。結果では、キー3が$ array2に存在しないため、 3 =>チェリーが保存されますが、値は異なります。予想どおり、コールバック関数はキー名でのみ有効であり、値は比較に参加しません。
array_diff_uassoc()コールバック関数がキー名にのみ有効である理由は、値を無視する理由は、主に関数の設計目標がキー名に基づいて差分計算を実行することであるためです。この動作は、関数のロジックを簡素化するのに役立ち、より効率的になり、目標に焦点を合わせます。キー名の違いです。キー値の差別的な比較を行う必要がある場合は、 array_diff_assoc()などの他の関数を使用したり、コールバック関数の値とキー名を処理したりできます。