W3docs

Comprendere la funzione PHP array_diff_key

La funzione PHP array_diff_key confronta array per chiave e restituisce le voci del primo array assenti negli altri. Semplice ma potente.

array_diff_key() confronta due o più array per le loro chiavi e restituisce le voci del primo array le cui chiavi non sono presenti in nessuno degli altri array. La parola chiave è chiavi: la funzione non esamina mai i valori. Questo la rende lo strumento giusto ogni volta che si desidera rimuovere o mantenere elementi di un array in base a un insieme di chiavi — ad esempio, eliminare campi indesiderati dall'input di un modulo o trovare quali opzioni di configurazione mancano in un override.

Questa pagina tratta la firma della funzione, un esempio eseguibile, come gestisce valori e chiavi numeriche, i casi d'uso reali più comuni e le differenze rispetto alle funzioni correlate per il confronto di array.

Sintassi

array_diff_key(array $array, array ...$arrays): array
  • $array — l'array da confrontare (il risultato contiene solo le sue voci).
  • ...$arrays — uno o più array le cui chiavi vengono usate per escludere voci da $array.
  • Restituisce un nuovo array. Ogni voce di $array viene mantenuta solo se la sua chiave non compare in nessuno degli altri array. Chiavi e valori sono preservati esattamente come erano in $array.

Come funziona array_diff_key

La funzione scorre le chiavi del primo array. Per ogni chiave, controlla tutti gli altri array; se la chiave viene trovata in uno qualsiasi di essi, quella voce viene eliminata. Sopravvivono solo le voci le cui chiavi sono univoche nel primo array.

Ecco un esempio pratico — confrontare un listino prezzi completo con gli articoli che hanno già uno sconto, per trovare quelli che ne hanno ancora bisogno:

Esempio PHP di utilizzo di array_diff_key

<?php

$prices = [
    "apple"  => 1.20,
    "banana" => 0.50,
    "cherry" => 3.00,
    "date"   => 2.10,
];

// Items that already have a discounted price.
$discounted = ["banana" => 0.40, "date" => 1.90];

// Keep only the items NOT present in $discounted (compared by key).
$result = array_diff_key($prices, $discounted);

print_r($result);

?>

L'output mantiene apple e cherry perché le loro chiavi sono assenti da $discounted. Si noti che banana e date vengono rimossi anche se i loro valori differiscono tra i due arrayarray_diff_key() ignora completamente i valori:

Array
(
    [apple] => 1.2
    [cherry] => 3
)

Confronto di più di due array

È possibile passare qualsiasi numero di array. Una voce viene rimossa se la sua chiave compare in uno qualsiasi di essi:

<?php

$a = ["color" => "red", "size" => "M", "qty" => 5];
$b = ["color" => "blue"];
$c = ["qty" => 99];

print_r(array_diff_key($a, $b, $c));

?>

Rimane solo size, perché color è trovato in $b e qty è trovato in $c:

Array
(
    [size] => M
)

Le chiavi vengono confrontate come stringhe

PHP converte tutte le chiavi in stringhe prima di confrontarle, quindi la chiave intera 0 e la chiave stringa "0" vengono trattate come la stessa chiave. Questo è importante quando si mescolano chiavi numeriche e string:

<?php

$nums   = [0 => "a", 1 => "b", 2 => "c"];
$remove = ["0" => "x", "2" => "y"];

print_r(array_diff_key($nums, $remove));

?>
Array
(
    [1] => b
)

Casi d'uso di array_diff_key

  • Whitelist/blacklist di campi. Rimuovere le chiavi indesiderate dall'input dell'utente: array_diff_key($input, array_flip(['password', 'token'])) elimina quelle due chiavi indipendentemente dai loro valori.
  • Trovare configurazioni mancanti. Confrontare un insieme di valori predefiniti con una configurazione fornita dall'utente per vedere quali chiavi sono state omesse.
  • Riconciliare dataset. Identificare record (indicizzati per ID) presenti in un array ma non in un altro.
  • Pulire i dati di una richiesta prima di passarli a una funzione che rifiuta chiavi inattese.

Suggerimento: Se invece si vuole mantenere solo le voci le cui chiavi compaiono in un altro array, usare array_intersect_key() — è l'immagine speculare di array_diff_key().

array_diff_key vs. funzioni correlate

FunzioneConfronta perValori considerati?
array_diff_key()solo chiavino
array_diff()solo valori
array_diff_assoc()chiavi e valori
array_diff_ukey()chiavi tramite callbackno

Se è necessario un ulteriore controllo dei valori oltre al confronto delle chiavi, utilizzare array_diff_assoc(). Per personalizzare il modo in cui le chiavi vengono confrontate (ad esempio, confronto senza distinzione tra maiuscole e minuscole), usare array_diff_ukey().

Conclusione

array_diff_key() è un modo mirato e veloce per filtrare un array rispetto alle chiavi degli altri. Ricordare le due regole che creano confusione: confronta solo le chiavi (i valori vengono ignorati) e le chiavi vengono convertite in stringhe prima del confronto. Per confronti che tengono conto dei valori, vedere array_diff_assoc(); per verificare una singola chiave usare array_key_exists().

Esercizio

Pratica
Cosa fa la funzione array_diff_key() in PHP?
Cosa fa la funzione array_diff_key() in PHP?
Was this page helpful?