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

作成日: 更新日:

『array_diff_key関数は、キーに基づいて配列の差を計算し、最初の配列にのみ存在するキーを持つ要素を抽出する関数です。この関数は、第一引数に指定した配列を基準とし、第二引数以降に指定した一つ以上の配列と比較を行います。比較の際にはキーのみが使用され、各キーに対応する値は比較の対象にはなりません。具体的には、第一引数の配列に含まれるキーが、第二引数以降のどの配列にも存在しない場合に、そのキーとそれに対応する値のペアが結果の配列に含まれます。この処理の結果として、差分を格納した新しい配列が返されます。元の引数として渡した配列が変更されることはありません。この関数は、複数の設定配列を比較して、特定の配列にだけ存在する設定項目を洗い出すような場面で役立ちます。キーの比較は、型までを厳密に評価するのではなく、通常の比較演算子と同様の方法で行われる点に注意が必要です。

基本的な使い方

構文(syntax)

<?php

$array1 = ['color1' => 'red', 'color2' => 'green', 'color3' => 'blue'];
$array2 = ['color1' => 'orange', 'color4' => 'purple'];

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

print_r($result);

?>

引数(parameters)

array $array, array ...$arrays

  • array $array: 比較対象となる配列
  • array ...$arrays: 比較元の配列(複数指定可能)

戻り値(return)

array

第一引数で指定された配列から、第二引数以降で指定された配列のキーと一致するキーを持つ要素を除外した新しい配列を返します。

サンプルコード

PHP array_diff_keyで配列のキーを比較する

<?php

/**
 * array_diff_key関数の使用例
 * 複数の配列のキーを比較し、最初の配列にのみ存在するキーを持つ要素を返します。
 * 値は比較されず、キーのみが考慮されます。
 *
 * システムエンジニアを目指す初心者向けに、array_diff_keyの基本的な動作を示します。
 */

// 比較する最初の配列を定義します。
// この配列から、他の配列と共通のキーを持つ要素が除外されます。
$array1 = [
    'product_id'   => 101,
    'product_name' => 'Laptop',
    'price'        => 1200,
    'quantity'     => 50,
    'status'       => 'available',
];

// 比較対象となる追加の配列を定義します。
// これらの配列のキーが$array1から除外される対象となります。
$array2 = [
    'product_name' => 'Desktop', // キー 'product_name' は$array1から除外されます。
    'price'        => 800,       // キー 'price' は$array1から除外されます。
    'category'     => 'Electronics',
];

$array3 = [
    'quantity'     => 10,       // キー 'quantity' は$array1から除外されます。
    'manufacturer' => 'ABC Inc.',
    'product_id'   => 202,      // キー 'product_id' は$array1から除外されます。
];

echo "--- 元の配列 ---" . PHP_EOL;
echo "配列1: " . PHP_EOL;
print_r($array1);
echo "配列2: " . PHP_EOL;
print_r($array2);
echo "配列3: " . PHP_EOL;
print_r($array3);

// 例1: array_diff_key関数を使用して、$array1と$array2のキーを比較します。
// $array1に存在し、$array2に存在しないキーを持つ要素が返されます。
$result1 = array_diff_key($array1, $array2);
echo "--- array_diff_key(\$array1, \$array2) の結果 ---" . PHP_EOL;
echo "配列1にのみ存在するキーの要素:" . PHP_EOL;
print_r($result1);
/*
期待される出力:
Array
(
    [product_id] => 101
    [quantity] => 50
    [status] => available
)
*/

echo PHP_EOL; // 結果を見やすくするための改行

// 例2: 複数の配列と比較することも可能です。
// $array1のキーと、$array2および$array3のいずれにも存在しないキーを持つ要素が返されます。
$result2 = array_diff_key($array1, $array2, $array3);
echo "--- array_diff_key(\$array1, \$array2, \$array3) の結果 ---" . PHP_EOL;
echo "配列1にのみ存在するキーの要素 (配列2と配列3のキーと比較):" . PHP_EOL;
print_r($result2);
/*
期待される出力:
Array
(
    [status] => available
)
*/

echo PHP_EOL; // 結果を見やすくするための改行

// array_diff_keyは値の比較を行わないことを示す例
$arrayA = ['name' => 'Alice', 'id' => 1];
$arrayB = ['id' => 2, 'age' => 30]; // idの値は異なるがキーは共通

$diffKeyResult = array_diff_key($arrayA, $arrayB);

echo "--- 値の比較に関係なくキーのみを比較する例 ---" . PHP_EOL;
echo "配列A: " . PHP_EOL;
print_r($arrayA);
echo "配列B: " . PHP_EOL;
print_r($arrayB);
echo "array_diff_key(\$arrayA, \$arrayB) の結果:" . PHP_EOL;
print_r($diffKeyResult);
/*
期待される出力:
Array
(
    [name] => Alice
)
*/

?>

array_diff_key関数は、複数の配列を比較し、最初の配列にのみ存在するキーを持つ要素を抽出するPHPの関数です。この関数は、配列のキーだけに着目し、キーが比較対象の他のどの配列にも含まれていない場合に、そのキーとその値を最初の配列から取得して新しい配列として返します。

引数としては、最初に比較の基準となる配列$arrayを指定し、その後ろに比較対象となる一つ以上の配列...$arraysを任意で追加します。戻り値は、抽出された要素を含む新しい配列です。重要な点として、この関数はキーのみを比較し、キーに対応する値は一切考慮されません。たとえ値が異なっていたとしても、キーが共通であれば、最初の配列からその要素は除外されます。

サンプルコードでは、$array1を基準として、$array2$array3と比較しています。例えば、array_diff_key($array1, $array2)では、$array1に存在し$array2には存在しないキー(product_id, quantity, status)を持つ要素が結果として返されます。また、array_diff_key($array1, $array2, $array3)のように複数の配列を比較対象とすると、$array1のキーが$array2または$array3のいずれかにでも存在すれば除外され、最終的にstatusキーを持つ要素のみが残ります。値が異なっていてもキーが共通であれば除外される動作も示されており、array_diff_keyがキーのみを基に差分を抽出する機能であることが理解できます。

array_diff_key関数は、最初の配列に存在するキーのうち、比較対象の配列には存在しないキーを持つ要素のみを返します。この関数は値の比較を一切行わず、キーが一致するかどうかだけを判断する点に注意してください。キーが同じであれば、値の内容が異なっていてもそのキーを持つ要素は結果から除外されます。複数の配列を引数に渡した場合、最初の配列のキーが、後続のすべての配列のキーと比較されます。キーの存在チェックや、特定のキーを持つ要素を最初の配列から取り除きたい場合に活用すると良いでしょう。値の比較をしたい場合はarray_diffなどの別の関数を使用してください。

【PHP8.x】array_diff_key関数の使い方 | いっしー@Webエンジニア