【PHP8.x】array_intersect_assoc関数の使い方

array_intersect_assoc関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

array_intersect_assoc関数は、複数の配列を比較し、キーと値の両方が完全に一致する共通の要素を抽出する関数です。この関数は、引数として渡された複数の配列を順番に評価します。最初の配列を基準として、その要素が持つキーと値のペアが、比較対象となる他のすべての配列にも同じキーと値のペアとして存在するかどうかを確認します。

具体的には、ある要素のキーとその値の両方が、比較対象となる残りのすべての配列内に完全に一致するキーと値を持つ要素として見つかった場合に、その要素は共通と判断されます。そして、共通と判断された要素だけを新しい配列として返します。この結果として得られる配列は、最初の配列から共通する要素だけが抜き出された形となり、元のキーと値の関係は保持されます。

例えば、複数の商品リストの中から、商品ID(キー)と商品名(値)が完全に一致する商品だけを特定したい場合や、複数の設定データから共通する設定項目を抽出したい場合などに非常に役立ちます。この関数を使用することで、複雑なループ処理を記述することなく、効率的に配列の共通要素を厳密に特定することが可能です。

構文(syntax)

1<?php
2$array_base = ["apple" => "red", "banana" => "yellow", "cherry" => "red"];
3$array_compare = ["apple" => "red", "cherry" => "pink", "grape" => "green"];
4
5$common_elements_by_key_and_value = array_intersect_assoc($array_base, $array_compare);
6?>

引数(parameters)

array $array, array ...$arrays

  • array $array: 比較対象となる最初の配列
  • array ...$arrays: 比較対象となる追加の配列(可変長引数)

戻り値(return)

array

配列 array1 と array2 を比較し、両方の配列でキーと値が一致する要素のみを含む新しい配列を返します。

サンプルコード

array_intersect_assocで多次元配列を比較する

1<?php
2
3/**
4 * array_intersect_assoc 関数は、複数の配列間でキーと値の両方が一致する要素を検索し、
5 * 最初に指定した配列から共通する要素を返します。
6 *
7 * この例では、複数の設定配列(多次元配列の一部として考えられる)を比較し、
8 * トップレベルのキーと、その値(サブ配列全体)が完全に一致する要素を抽出します。
9 * PHPの配列比較のルールにより、値が配列の場合、そのサブ配列の全てのキーと値が
10 * 一致する場合にのみ「一致」と見なされます。
11 */
12
13// ユーザー設定のデフォルト値を模倣した多次元配列
14$defaultSettings = [
15    'theme' => [
16        'background_color' => '#ffffff',
17        'text_color' => '#333333',
18        'font_size' => '16px',
19        'language' => 'en',
20    ],
21    'notifications' => [
22        'email' => true,
23        'sms' => false,
24        'push' => true,
25        'interval' => 'daily',
26    ],
27    'privacy' => [
28        'data_sharing' => false,
29        'ad_personalization' => true,
30    ],
31];
32
33// ユーザーAの設定。一部がデフォルトと異なる。
34$userASettings = [
35    'theme' => [
36        'background_color' => '#000000', // デフォルトと異なる
37        'text_color' => '#ffffff',       // デフォルトと異なる
38        'font_size' => '16px',
39        'language' => 'en',
40    ],
41    'notifications' => [ // このセクションはデフォルトと完全に一致
42        'email' => true,
43        'sms' => false,
44        'push' => true,
45        'interval' => 'daily',
46    ],
47    'security' => [ // デフォルトにはない新しい設定
48        'two_factor_auth' => true,
49    ],
50];
51
52// ユーザーBの設定。一部がデフォルトやユーザーAと異なる。
53$userBSettings = [
54    'theme' => [ // background_color, text_color, font_size, language が全てデフォルトと一致
55        'background_color' => '#ffffff',
56        'text_color' => '#333333',
57        'font_size' => '16px',
58        'language' => 'en',
59    ],
60    'notifications' => [ // interval の値が異なるため、このセクションはデフォルトと不一致
61        'email' => true,
62        'sms' => false,
63        'push' => true,
64        'interval' => 'weekly',
65    ],
66    'privacy' => [ // このセクションはデフォルトと完全に一致
67        'data_sharing' => false,
68        'ad_personalization' => true,
69    ],
70];
71
72echo "--- 複数の設定配列間の共通要素を検索 ---\n";
73
74// 1. $defaultSettings と $userASettings の間で、キーと値(サブ配列全体)が完全に一致する要素を検索
75$commonToDefaultAndA = array_intersect_assoc($defaultSettings, $userASettings);
76echo "\n共通要素 (デフォルト設定 & ユーザーA設定):\n";
77print_r($commonToDefaultAndA);
78/*
79期待される出力例:
80Array
81(
82    [notifications] => Array
83        (
84            [email] => 1
85            [sms] =>
86            [push] => 1
87            [interval] => daily
88        )
89)
90*/
91
92// 2. $defaultSettings と $userBSettings の間で、キーと値(サブ配列全体)が完全に一致する要素を検索
93$commonToDefaultAndB = array_intersect_assoc($defaultSettings, $userBSettings);
94echo "\n共通要素 (デフォルト設定 & ユーザーB設定):\n";
95print_r($commonToDefaultAndB);
96/*
97期待される出力例:
98Array
99(
100    [theme] => Array
101        (
102            [background_color] => #ffffff
103            [text_color] => #333333
104            [font_size] => 16px
105            [language] => en
106        )
107    [privacy] => Array
108        (
109            [data_sharing] =>
110            [ad_personalization] => 1
111        )
112)
113*/
114
115// 3. 3つの配列すべてで、キーと値(サブ配列全体)が完全に一致する要素を検索
116$commonToAll = array_intersect_assoc($defaultSettings, $userASettings, $userBSettings);
117echo "\n共通要素 (デフォルト設定 & ユーザーA設定 & ユーザーB設定):\n";
118print_r($commonToAll);
119/*
120期待される出力例:
121Array
122(
123)
124(この例では、3つ全てで完全に一致するトップレベルのサブ配列は存在しないため、空の配列が返されます。)
125*/

array_intersect_assoc関数は、PHPにおいて複数の配列を比較し、キーと値の両方が一致する要素を抽出する際に使用されます。この関数は、比較対象となる複数の配列を引数として受け取り、最初の配列に含まれる要素のうち、比較対象の全ての配列にもキーと値が完全に一致する要素のみを抜き出した新しい配列を戻り値として返します。

特に多次元配列を扱う際、この関数は非常に有用です。値が配列である場合、array_intersect_assocはサブ配列の全てのキーと値が完全に一致する場合にのみ、その要素を「共通」と判断します。これは、設定情報のデフォルト値とユーザー設定を比較し、どのセクションがデフォルトのまま変更されていないかを確認するような場面で役立ちます。

サンプルコードでは、$defaultSettings$userASettings$userBSettingsという3つの多次元配列を用いて、これらの設定の共通部分を検索する例を示しています。例えば、$defaultSettings$userASettingsを比較した場合、notificationsセクションはキーと値が完全に一致するため結果に含まれますが、themeセクションは一部の値が異なるため共通要素とは見なされません。また、3つの配列全てで完全に一致するトップレベルの要素が存在しない場合は、空の配列が返されることも確認できます。このように、複雑な設定データの整合性を確認する際に、この関数は強力なツールとなります。

array_intersect_assoc関数は、複数の配列間でキーと値が完全に一致する要素を抽出します。特に、値が配列(多次元配列)の場合、そのサブ配列内の全てのキーと値が完全に一致しない限り、共通要素とは見なされません。一部の要素だけが一致していても、トップレベルの配列としては不一致と判断されますので注意が必要です。この関数は、渡された配列のトップレベルの要素のみを比較対象とし、サブ配列の奥深くまでは再帰的に比較しません。結果は常に、最初の引数で指定された配列の要素を基に返されます。この厳密な比較ルールを理解して利用することが重要です。

関連コンテンツ