PHPでは、 array_diff()とarray_intersect()は、配列の比較と差計算に重要な役割を果たす2つの非常に一般的な配列操作関数です。これら2つの関数の関数は異なりますが、コードの効率を改善するために組み合わせて使用できる場合があります。この記事では、それらの違いを詳細に説明し、それらを組み合わせて使用する方法を示します。
array_diff()は、最初の配列に存在するが他の配列にはない要素を含む配列を返すために使用されます。簡単に言えば、 array_diff()は、配列の「違いセット」を計算します。
array_diff(array $array1, array $array2, array ...$arrays): array
$array1 = [1, 2, 3, 4];
$array2 = [3, 4, 5, 6];
$result = array_diff($array1, $array2);
print_r($result);
出力:
Array
(
[0] => 1
[1] => 2
)
上記の例では、 array_diff()は、 array1 、つまり1および2ではarray1では要素を返します。
array_intersect()は、2つ以上の配列に存在するすべての要素を含む配列を返すために使用されます。配列の「交差」を計算します。
array_intersect(array $array1, array $array2, array ...$arrays): array
$array1 = [1, 2, 3, 4];
$array2 = [3, 4, 5, 6];
$result = array_intersect($array1, $array2);
print_r($result);
出力:
Array
(
[2] => 3
[3] => 4
)
上記の例では、 array_intersect()は、 array1とarray2の両方に存在する要素、つまり3と4を返します。
これら2つの機能の違いを要約しましょう。
array_diff() :最初の配列にあるが、他の配列にはない要素を含む配列を返します。言い換えれば、「差セット」を計算します。
array_intersect() :2つ以上の配列に存在するすべての要素を含む配列を返します。 「交差」を計算します。
結果から、 array_diff()によって返される要素は他の配列を除外し、 array_intersect()は共通要素を返します。
時には、複雑な配列を処理するときに同時に違いと交差を取得する必要があります。現時点では、効率を改善するためにarray_diff()とarray_intersect()を組み合わせて使用することを検討してください。たとえば、特定の不要な要素を除外し、交差点に共通の要素を見つける必要がある場合、これら2つの機能を組み合わせることは1つのステップで実行できます。
2つの配列があるとします。1つはユーザーaの利子リストであり、もう1つはユーザーBの利子リストです。Aの利息を持っているもの(違いセット)があり、AとBが共有する利益(交差セット)も見つける必要があります。
$userA = ['music', 'sports', 'travel', 'reading'];
$userB = ['sports', 'travel', 'photography'];
// 得るA持っているB興味がありません
$diff = array_diff($userA, $userB);
print_r($diff); // 出力: Array ( [0] => music [3] => reading )
// 得るAそしてB共通の利益
$intersect = array_intersect($userA, $userB);
print_r($intersect); // 出力: Array ( [1] => sports [2] => travel )
このアプローチは、2つのアレイのさまざまな部分を同じ部分と分離して比較するのに効果的に役立ち、複雑さを軽減します。
場合によっては、URLリストを処理し、対応する判断を下す必要があります。 array_diff()およびarray_intersect()は、このタイプのアプリケーションシナリオでも使用できます。たとえば、一部のURLが指定されたドメイン名の下にないことを確認するか、2つのドメイン名のリストの交差点を確認する必要があるとします。
$urlsA = ['http://example.com', 'http://m66.net/page1', 'http://m66.net/page2'];
$urlsB = ['http://m66.net/page1', 'http://m66.net/page2', 'http://example.com/page3'];
// 得る在AではありませんB社内URL
$diffUrls = array_diff($urlsA, $urlsB);
print_r($diffUrls); // 出力: Array ( [0] => http://example.com )
// 得るAそしてB一般URL
$intersectUrls = array_intersect($urlsA, $urlsB);
print_r($intersectUrls); // 出力: Array ( [1] => http://m66.net/page1 [2] => http://m66.net/page2 )
array_diff()およびarray_intersect()は、配列を処理するときに非常に有用な関数であり、それぞれ差と交点を計算するために使用されます。
これら2つの機能を組み合わせて使用することにより、特に異なる部分と同じ部分を同時に取得する必要がある場合、配列データをより効率的に処理できます。
実際の開発では、特にURL、ユーザーデータなどを扱う場合、これら2つの機能を合理的に使用すると、コードの読みやすさと実行効率が向上します。