Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

PHP辞典

  1. トップページ
  2. PHP辞典
  3. array_intersect() / array_diff()

array_intersect() / array_diff()対応: PHP 4(2000)

複数の配列の共通要素や差分を取得する関数です。値による比較とキーによる比較の両方に対応しています。

構文
// 値を比較して共通する要素を取得します。
array_intersect(配列1, 配列2, ...);

// 値を比較して差分の要素を取得します。
array_diff(配列1, 配列2, ...);

// キーを比較して共通する要素を取得します。
array_intersect_key(配列1, 配列2, ...);

// キーを比較して差分の要素を取得します。
array_diff_key(配列1, 配列2, ...);
関数一覧
関数概要
array_intersect($array1, $array2, ...)配列の値を比較し、すべての配列に共通する値を持つ要素を返します。キーは最初の配列のものが保持されます。
array_diff($array1, $array2, ...)配列の値を比較し、最初の配列にあって他の配列にない要素を返します。
array_intersect_key($array1, $array2, ...)配列のキーを比較し、共通するキーを持つ要素を最初の配列から返します。
array_diff_key($array1, $array2, ...)配列のキーを比較し、最初の配列にあって他の配列にないキーの要素を返します。
サンプルコード
<?php
$team_a = ['PHP', 'JavaScript', 'Python', 'Ruby'];
$team_b = ['JavaScript', 'Python', 'Go', 'Rust'];

// 両方のチームに共通するスキルを取得します。
$common = array_intersect($team_a, $team_b);
print_r($common); // 『JavaScript, Python』が返されます。

// チームAにあってチームBにないスキルを取得します。
$only_a = array_diff($team_a, $team_b);
print_r($only_a); // 『PHP, Ruby』が返されます。

// 連想配列でキーを比較します。
$old_settings = ['theme' => 'dark', 'lang' => 'ja', 'font_size' => 14];
$new_settings = ['theme' => 'light', 'lang' => 'en', 'sidebar' => true];

// 共通するキーの要素を取得します。
$common_keys = array_intersect_key($old_settings, $new_settings);
print_r($common_keys); // 『theme, lang』のキーに対応する旧設定の値が返されます。

// 古い設定にあって新しい設定にないキーを取得します。
$removed = array_diff_key($old_settings, $new_settings);
print_r($removed); // 削除された設定『font_size』が返されます。

// 新しい設定にあって古い設定にないキーを取得します。
$added = array_diff_key($new_settings, $old_settings);
print_r($added); // 追加された設定『sidebar』が返されます。
概要

『array_intersect()』と『array_diff()』は配列の値を比較する関数で、返される配列のキーは最初の配列のものが保持されます。キーが飛び飛びになるため、必要に応じて『array_values()』で振り直してください。

『array_intersect_key()』と『array_diff_key()』はキーを基準に比較を行います。返される値は最初の配列のものであり、2番目以降の配列の値は使用されません。設定の差分検出やデータのマージ処理で活用できます。

値とキーの両方を同時に比較したい場合は『array_intersect_assoc()』や『array_diff_assoc()』を使用してください。配列内の特定の値を検索する場合は『in_array() / array_search()』が適しています。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。