毎日のPHP開発では、アレイ間の違いを比較する必要がある状況に遭遇することがよくあります。多次元配列の場合、 array_diff_ukey()は、トップレベルキー(第1レベルキー)の違いのみを気にかけ、その値を比較しない場合、非常に実用的なツールです。
この記事では、Array_diff_ukey()を使用して、2つの多次元配列のトップレベルキーを比較し、さまざまな部分を見つける方法について説明します。
array_diff_ukey()は、ユーザーが提供するコールバック関数に基づいてキー名を比較するために使用され、キー名が複製されていない2つ以上の配列のパーツを見つけるために使用されます。
文法:
array_diff_ukey(array $array1, array $array2, callable $key_compare_func): array
$ array1 :比較する配列。
$ array2 :最初の配列と比較するために使用される配列。
$ key_compare_func :ユーザー定義のキー比較関数。
2つの異なる構成セットを表す2つの多次元配列があるとします。メイン構成には存在するが、比較構成には存在するトップレベルキー(第1レベルのキー)を見つけたい。
$configMain = [
'database' => [
'host' => 'localhost',
'port' => 3306
],
'cache' => [
'enabled' => true
],
'api' => [
'endpoint' => 'https://m66.net/api'
]
];
$configCompare = [
'database' => [
'host' => '127.0.0.1',
'port' => 3306
],
'cache' => [
'enabled' => false
]
];
$ configmainのどのトップレベルキーが$ configcompareに表示されないか(上記の例のAPIキーなど)を見つけたいと思います。
<?php
function compareKeys($a, $b) {
if ($a === $b) {
return 0;
}
return ($a > $b) ? 1 : -1;
}
$configMain = [
'database' => [
'host' => 'localhost',
'port' => 3306
],
'cache' => [
'enabled' => true
],
'api' => [
'endpoint' => 'https://m66.net/api'
]
];
$configCompare = [
'database' => [
'host' => '127.0.0.1',
'port' => 3306
],
'cache' => [
'enabled' => false
]
];
$diffKeys = array_diff_ukey($configMain, $configCompare, 'compareKeys');
print_r($diffKeys);
Array
(
[api] => Array
(
[endpoint] => https://m66.net/api
)
)
ご覧のとおり、 array_diff_ukey()は、 $ configmainに存在するが$ configcompareには存在するトップレベルのキーAPIを正常に見つけます。
コールバック関数は、2つのキーを比較する関数でなければなりません。戻り値ルールは、 strcmp() :0未満、0に等しく、0より大きいと同じです。
この関数は値を比較せず、キーのみを比較します。
ネストされた構造を比較する場合は、トップレベルのキーにのみ有効で、一致する再帰ロジックを使用してください。
Array_diff_ukey()を使用することは、特に主要な構造の違いのみが関係する多次元配列のシナリオで、2つの配列間のキー名の違いを比較するための効率的かつ簡潔な方法です。
構成の違い、構造の比較、または許可確認の実行であるかどうかにかかわらず、この関数の使用を習得すると、よりクリーンでより明確なPHPコードを記述できます。
キー値のペアの違いをさらに比較する場合は、 array_diff_assoc()またはカスタム再帰関数処理の使用を検討できます。