PHPでは、 array_diff_key()関数を使用して、2つ以上の配列間の重要な違いを計算します。他の配列に存在する最初の配列のすべてのキー間の違いを含む配列を返します。両方の配列のキーがまったく同じ場合、結果は空の配列です。
<?php
$array1 = [
'apple' => 'fruit',
'carrot' => 'vegetable',
'pear' => 'fruit'
];
$array2 = [
'apple' => 'fruit',
'carrot' => 'vegetable'
];
$result = array_diff_key($array1, $array2);
print_r($result);
?>
出力:
Array
(
[pear] => fruit
)
このコードは、array_diff_key()関数によって2つの配列のキー間の違いを計算する方法を示しています。この例では、パールは$ array1にのみ表示されるため、返されます。
さらに特別な状況をさらに探りましょう。Array_diff_key ()は、 arrayのキーが文字列でも整数でもない場合、どのように動作しますか? PHPでは、配列のキーは、整数、文字列、または他のタイプの値(オブジェクトなど)です。ただし、PHPは特定のデータ型を文字列または整数型に配列キーとして変換します。したがって、配列のキーが文字列でも整数でもない場合、タイプ変換が発生する場合があります。
次のコードの例を考えてみましょう。
<?php
$array1 = [
new DateTime() => 'time object',
3.14159 => 'pi',
true => 'boolean'
];
$array2 = [
'2025-04-18 10:00:00' => 'time object',
3 => 'pi',
'1' => 'boolean'
];
$result = array_diff_key($array1, $array2);
print_r($result);
?>
この例では、 $ array1はさまざまなタイプのキーを使用します: DateTimeオブジェクト、フローティングポイント番号、およびブール値。 $ array2は、文字列'2025-04-18 10:00:00' 、整数3 、文字列「1」をキーとして使用します。 array_diff_key()がこれらのキーをどのように処理するかを分析しましょう。
Arrayキーを処理するときのPHP、非integerおよび非弦キーが入力されます。具体的には:
DateTimeオブジェクトは、その文字列表現( dateTime :: __ toString() )に変換されます。
フローティングポイント番号3.14159は、文字列「3.14159」に変換されます。
ブールの真の値は、文字列「1」に変換されます。
したがって、これらのキーを処理する際には、 array_diff_key()を元のキーと比較することができ、タイプ構成キーは異なると見なされます。
array_diff_key()は、キータイプの変換ルールに従って比較されます。配列のキーが文字列でも整数でもない場合、PHPはこれらのキーを文字列または整数に自動的に変換し、これらの変換された値に基づいてそれらを比較します。特定の特別なデータ型、特にオブジェクトまたはブール値で直感的でない結果が発生する場合があります。したがって、 array_diff_key()を使用する場合、予期しない型変換を避けるために、配列のキーが文字列または整数であることを確認することが最善です。