Aktueller Standort: Startseite> Neueste Artikel> Das Verhalten von array_diff_key (), wenn eine Array -Taste keine Zeichenfolge oder eine Ganzzahl ist

Das Verhalten von array_diff_key (), wenn eine Array -Taste keine Zeichenfolge oder eine Ganzzahl ist

M66 2025-05-15

In PHP wird die Funktion array_diff_key () verwendet, um die wichtigsten Unterschiede zwischen zwei oder mehr Arrays zu berechnen. Es gibt ein Array zurück, das die Unterschiede zwischen allen Schlüssel im ersten Array enthält, die in anderen Arrays existieren. Wenn die Schlüssel in beiden Arrays genau gleich sind, ist das Ergebnis ein leeres Array.

 <?php
$array1 = [
    'apple' => 'fruit',
    'carrot' => 'vegetable',
    'pear' => 'fruit'
];

$array2 = [
    'apple' => 'fruit',
    'carrot' => 'vegetable'
];

$result = array_diff_key($array1, $array2);
print_r($result);
?>

Ausgabe:

 Array
(
    [pear] => fruit
)

Dieser Code zeigt, wie die Differenz zwischen den Schlüssel in zwei Arrays von der Funktion array_diff_key () berechnet wird. In diesem Beispiel erscheint Pearl nur in $ array1 , so dass es zurückgegeben wird.

Die Manifestation eines Schlüssels ist weder eine Zeichenfolge noch eine Ganzzahl

Lassen Sie uns weiter eine besondere Situation erkunden: Wie wird Array_Diff_key () sich verhalten, wenn die Schlüssel eines Arrays weder Strings noch Ganzzahlen sind? In PHP können die Schlüssel eines Arrays Ganzzahlen, Zeichenfolgen oder andere Arten von Werten (z. B. Objekte usw.) sein. PHP konvertiert jedoch bestimmte Datentypen in String- oder Ganzzahltypen als Array -Tasten. Daher kann eine Typumwandlung auftreten, wenn die Schlüssel eines Arrays weder Zeichenfolgen noch Ganzzahlen sind.

Betrachten Sie das folgende Code -Beispiel:

 <?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);
?>

In diesem Beispiel verwendet $ array1 verschiedene Tastenarten: DateTime -Objekt, schwimmende Punktnummer und Boolesche. $ array2 verwendet die Zeichenfolge '2025-04-18 10:00:00' , Integer 3 und String '1' als Schlüssel. Lassen Sie uns analysieren, wie array_diff_key () diese Schlüssel umgehen wird.

PHP Bei der Verarbeitung von Arrayschlüssel, Nichteiger- und Nicht-String-Schlüssel werden tippt. Speziell:

  • Das DateTime -Objekt wird in seine String -Darstellung konvertiert ( DateTime :: __ toString () ).

  • Die schwimmende Punktzahl 3.14159 wird in die Zeichenfolge "3.14159" umgewandelt.

  • Der tatsächliche Wert von Boolean wird in die Zeichenfolge "1" konvertiert.

Daher kann Array_diff_key () bei der Verarbeitung dieser Schlüssel mit den ursprünglichen Schlüssel verglichen werden, und die Typ-konvertierten Schlüssel werden als unterschiedlich angesehen.

abschließend

array_diff_key () wird gemäß den Schlüsseltyp -Konvertierungsregeln verglichen. Wenn die Schlüssel eines Arrays weder Zeichenfolgen noch Ganzzahlen sind, wandelt PHP diese Schlüssel automatisch in Zeichenfolgen oder Ganzzahlen um und vergleichen sie anhand dieser konvertierten Werte. Unintuitive Ergebnisse können für bestimmte spezielle Datentypen, insbesondere Objekte oder Boolesche, auftreten. Bei Verwendung von array_diff_key () ist es daher am besten sicherzustellen, dass die Schlüssel des Arrays Streicher oder Ganzzahlen sind, um unerwartete Typumrechnungen zu vermeiden.