PHPのarray_intersect_assoc!キーと値で共通要素を取得

PHPのarray_intersect_assoc関数の使い方について書いています。

この関数を使うと、複数の配列からキーと値の両方が一致する共通要素を取得できます。
配列操作で特定の条件に合うデータを取り出したいときに便利です。

array_intersect_assoc関数の基本的な使い方

array_intersect_assoc関数は、複数の配列を比較し、キーの両方が一致する要素を返します。
基本的な構文は以下のとおりです。

array_intersect_assoc(array $array1, array $array2, array ...$arrays): array
  • $array1: 比較の基準となる配列(必須)。
  • $array2, …$arrays: 比較対象となる1つ以上の配列。

キーと値を確認して要素を取得

シンプルな連想配列で、キーと値が一致するデータを取得します。

<?php
$array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['a' => 1, 'b' => 4, 'c' => 3];

$result = array_intersect_assoc($array1, $array2);

print_r($result);
// 結果:
// Array
// (
//     [a] => 1
//     [c] => 3
// )

連想配列の$array1$array2を作成しました。
そして、次の処理でarray_intersect_assoc関数を使って、比較しています。

返ってきた結果を確認します。
キー(‘a’,’c’)と値(1, 3)が一致するため、結果に含まれます。
キー’b’は値が異なる(2,4)ため、結果には含まれませんでした。

このようにキーと値が一致する要素を取得できます。

複数の配列で共通要素を取得する

3つ以上の配列を比較して、キーと値が同じものを取得します。

<?php
$array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['a' => 1, 'b' => 4, 'c' => 3];
$array3 = ['a' => 1, 'c' => 3, 'd' => 5];

$result = array_intersect_assoc($array1, $array2, $array3);

print_r($result);
// 結果:
// Array
// (
//     [a] => 1
//     [c] => 3
// )

3つの連想配列を用意して、比較しています。

キー(‘a’,’c’)と値(1, 3)がすべて一致しているため、結果に残ります。
キー(‘b’,’d’)は一部の配列で値が異なったり存在しなかったりするため除外されました。

array_intersect関数との違い

array_intersect関数は値だけを比較しますが、array_intersect_assoc関数はキーと値の両方をチェックします。
違いを確認してみます。

<?php
$array1 = ['a' => 1, 'b' => 2];
$array2 = ['x' => 1, 'b' => 2];

$result1 = array_intersect($array1, $array2);
$result2 = array_intersect_assoc($array1, $array2);

print_r($result1);
// 結果:
// Array
// (
//     [a] => 1
//     [b] => 2
// )

print_r($result2);
// 結果:
// Array
// (
//     [b] => 2
// )

array_intersect関数では、値1と2が一致しているので、キーに関係なく結果に含まれます。
一方、array_intersect_assoc関数では、キー’b’の値2だけが一致するため、それだけが結果に残ります。

空配列や一致しない場合の挙動

一致する要素がない場合や、空配列が渡された場合の挙動を確認します。

<?php
$array1 = ['a' => 1, 'b' => 2];
$array2 = ['x' => 3, 'y' => 4];
$array3 = [];

$result1 = array_intersect_assoc($array1, $array2);
$result2 = array_intersect_assoc($array1, $array3);

print_r($result1);
// 結果:
// Array
// (
// )

print_r($result2);
// 結果:
// Array
// (
// )

$array1$array2には共通要素がないため、空配列が返ります。
また、空配列$array3を比較対象に含めると、共通要素がないので結果は空になります。

PHPのarray_intersect_assoc関数の使い方まとめ

array_intersect_assoc関数の使い方を解説しました。
内容をまとめます。

・`array_intersect_assoc($array1, $array2, …)`でキーと値が一致する共通要素を取得。
・複数の配列を一度に比較可能。
・値だけを比較する`array_intersect`とは異なり、キーも一致する必要がある。
・一致する要素がない場合や、空配列が渡されると空配列を返す。
・連想配列でデータをフィルタリングするのに便利。
PHP

コメント