PHPでは、配列の違いセットを処理する多くの方法があります。一般的なarray_diff()関数に加えて、 array_flip()とarray_diff_key()関数の助けを借りて、「キー」メソッドを使用して、柔軟な差分セット計算を達成できます。この方法は、2つの配列間の「キー価値の一致する違い」を扱う際に特に効率的かつ実用的です。
array_flip()は、配列のキーと値を交換します。これは、元の値が鍵になり、キーが値になることを意味します。
$input = ['apple' => 'red', 'banana' => 'yellow'];
$result = array_flip($input);
// 出力:['red' => 'apple', 'yellow' => 'banana']
注:元の配列に重複した値がある場合、 array_flip()は複製を破棄し、最後の値のみが保持されます。
array_diff_key()は、2つ以上の配列のキーを比較し、最初の配列に存在するが他の配列には表示されないキー値ペアを返すために使用されます。
$array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['b' => 99];
$result = array_diff_key($array1, $array2);
// 出力:['a' => 1, 'c' => 3]
2つの配列があり、最初のアレイで一意の値(つまり、差セット)を見つけたいとします。Array_flip ()とarray_diff_key()の組み合わせを巧みに使用してそれを達成できます。
$groupA = ['apple', 'banana', 'cherry'];
$groupB = ['banana', 'grape'];
// 値をキーに変換します
$flippedA = array_flip($groupA);
$flippedB = array_flip($groupB);
// 微分操作(合格 key 差集)
$diff = array_diff_key($flippedA, $flippedB);
// 通常の値アレイに復元されました
$uniqueToA = array_keys($diff);
print_r($uniqueToA);
Array
(
[0] => apple
[1] => cherry
)
$ Groupaにあるが、 $ GroupBではない値を正常に見つけました。
この方法は、次のシナリオに非常に適しています。
2つのラベル配列の違いをすばやく見つけます。
ユーザー許可フィルタリング(ユーザーが許可を持っているが、モジュールは使用されていない機能を見つけます)。
複数のオプションの比較の違いなどを形成します。
たとえば、ユーザー許可システムを開発しており、現在のユーザーの許可は次のとおりです。
$userPermissions = ['edit', 'delete', 'create'];
特定のモジュールによってサポートされる操作は次のとおりです。
$moduleSupports = ['edit', 'create'];
ユーザーが持っている権限を見つけることができますが、モジュールは同じ方法でサポートしていません。
$diff = array_keys(array_diff_key(
array_flip($userPermissions),
array_flip($moduleSupports)
));
// 出力 ['delete']
PHPは評価に直接使用される違いセットを提供しますが、いくつかのより洗練されたシナリオ(値が一意である場合など)では、array_flip ( )とarray_diff_key()の組み合わせは効率的であるだけでなく、より柔軟な操作方法を提供します。
この種のトリックは、特に大きなアレイを扱う場合や、オペレーターを比較する場合に、より高いパフォーマンスをもたらす可能性があります。