現在の位置: ホーム> 最新記事一覧> array_diff_key()の動作配列キーが文字列または整数ではない場合

array_diff_key()の動作配列キーが文字列または整数ではない場合

M66 2025-05-15

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()を使用する場合、予期しない型変換を避けるために、配列のキーが文字列または整数であることを確認することが最善です。