現在の位置: ホーム> 最新記事一覧> array_flip() + array_diff_key()は、差動操作を実装します

array_flip() + array_diff_key()は、差動操作を実装します

M66 2025-05-18

PHPでは、配列の違いセットを処理する多くの方法があります。一般的なarray_diff()関数に加えて、 array_flip()array_diff_key()関数の助けを借りて、「キー」メソッドを使用して、柔軟な差分セット計算を達成できます。この方法は、2つの配列間の「キー価値の一致する違い」を扱う際に特に効率的かつ実用的です。

1。基本概念のレビュー

1。ARRAY_FLIP ()

array_flip()は、配列のキーと値を交換します。これは、元の値が鍵になり、キーが値になることを意味します。

 $input = ['apple' => 'red', 'banana' => 'yellow'];
$result = array_flip($input);

// 出力:['red' => 'apple', 'yellow' => 'banana']

注:元の配列に重複した値がある場合、 array_flip()は複製を破棄し、最後の値のみが保持されます。

2。ARRAY_DIFF_KEY ()

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を使用して、「値の違いセット」を実装します

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ではない値を正常に見つけました。

3。アプリケーションシナリオの例

この方法は、次のシナリオに非常に適しています。

  • 2つのラベル配列の違いをすばやく見つけます。

  • ユーザー許可フィルタリング(ユーザーが許可を持っているが、モジュールは使用されていない機能を見つけます)。

  • 複数のオプションの比較の違いなどを形成します。

たとえば、ユーザー許可システムを開発しており、現在のユーザーの許可は次のとおりです。

 $userPermissions = ['edit', 'delete', 'create'];

特定のモジュールによってサポートされる操作は次のとおりです。

 $moduleSupports = ['edit', 'create'];

ユーザーが持っている権限を見つけることができますが、モジュールは同じ方法でサポートしていません。

 $diff = array_keys(array_diff_key(
    array_flip($userPermissions),
    array_flip($moduleSupports)
));

// 出力 ['delete']

4。概要

PHPは評価に直接使用される違いセットを提供しますが、いくつかのより洗練されたシナリオ(値が一意である場合など)では、array_flip array_diff_key()の組み合わせは効率的であるだけでなく、より柔軟な操作方法を提供します。

この種のトリックは、特に大きなアレイを扱う場合や、オペレーターを比較する場合に、より高いパフォーマンスをもたらす可能性があります。