Funzione PHP Array Diff - Una Guida Completa
In PHP, array_diff_ukey confronta array e restituisce le differenze in base a una funzione personalizzata di confronto delle chiavi.
Funzione PHP array_diff_ukey() - Una Guida Completa
In PHP, la funzione array_diff_ukey() è uno strumento potente che consente di confrontare array e restituire la differenza tra essi sulla base di una funzione personalizzata di confronto delle chiavi. In questo articolo esamineremo più da vicino come funziona questa funzione e come è possibile utilizzarla nei propri progetti PHP.
Firma della Funzione e Parametri
array_diff_ukey(array $array, array ...$arrays, callable $key_compare_func): arrayQuesta è la notazione del manuale PHP per la funzione. A runtime l'ultimo argomento passato è sempre il callback di confronto; ogni argomento precedente è trattato come un array.
Parametri:
$array: L'array di base con cui confrontare.$arrays: Uno o più array da confrontare con l'array di base.$key_compare_func: Un callable che confronta due chiavi e restituisce un intero minore di, uguale a, o maggiore di zero (lo stesso contratto di un comparatore usort).
Restituisce: Un array contenente le voci di $array le cui chiavi non sono presenti in nessuno degli altri array. I valori non vengono mai ispezionati — solo le chiavi.
Quando si dovrebbe usare?
La maggior parte delle volte array_diff_key() è sufficiente: rimuove le voci le cui chiavi compaiono in altri array usando un semplice confronto di chiavi in stile ===. Si ricorre a array_diff_ukey() solo quando "questa chiave è la stessa?" richiede una logica personalizzata — ad esempio, trattare le chiavi senza distinguere maiuscole e minuscole, confrontare solo il prefisso di una chiave, o normalizzare stringhe numeriche prima della corrispondenza. Se è necessario confrontare i valori con un callback, vedere array_udiff(); per confrontare sia le chiavi che i valori, vedere array_diff_uassoc().
Come Funziona la Funzione PHP array_diff_ukey()?
La funzione array_diff_ukey() accetta due o più array come argomenti e confronta le loro voci sulla base della funzione di confronto delle chiavi fornita. La funzione di confronto delle chiavi deve restituire un intero minore di, uguale a, o maggiore di zero, a seconda del risultato del confronto.
Se il risultato del confronto è minore di zero, il primo argomento è considerato minore del secondo. Se il risultato è maggiore di zero, il primo argomento è considerato maggiore del secondo. Se il risultato è uguale a zero, i due argomenti sono considerati uguali.
Utilizzo della Funzione PHP array_diff_ukey()
Ecco un esempio di come è possibile utilizzare la funzione array_diff_ukey() in PHP:
Esempio PHP di utilizzo della funzione array_diff_ukey
<?php
function key_compare_func($a, $b)
{
if ($a === $b) {
return 0;
}
return ($a > $b)? 1:-1;
}
$array1 = ["a" => "green", "b" => "brown", "c" => "blue", "red"];
$array2 = ["a" => "green", "yellow", "red"];
$result = array_diff_ukey($array1, $array2, 'key_compare_func');
print_r($result);
?>In questo esempio, la funzione array_diff_ukey() viene usata per confrontare le voci in $array1 e $array2 sulla base di una funzione personalizzata di confronto delle chiavi denominata key_compare_func. L'array risultante, memorizzato in $result, contiene le voci di $array1 che non sono presenti in $array2.
Nota: nel callback, $a e $b rappresentano le chiavi degli array, non i valori.
Output:
Array
(
[b] => brown
[c] => blue
)Analisi passo per passo: $array1 ha le chiavi a, b, c e 0 (il "red" senza chiave riceve la chiave intera 0). $array2 ha le chiavi a, 0 e 1. Le chiavi a e 0 esistono in entrambi gli array, quindi array_diff_ukey() rimuove "green" e "red" dal risultato, lasciando solo le voci le cui chiavi (b, c) sono univoche di $array1.
Funzione Personalizzata di Confronto delle Chiavi
La funzione personalizzata di confronto delle chiavi è una parte fondamentale della funzione array_diff_ukey(), poiché determina come vengono confrontate le voci nei due array. Ecco un esempio di funzione personalizzata di confronto delle chiavi:
Esempio PHP di funzione personalizzata di confronto delle chiavi di un array
function key_compare_func($a, $b)
{
if ($a === $b) {
return 0;
}
return ($a > $b)? 1:-1;
}In questo esempio, la funzione key_compare_func() restituisce 0 se i due argomenti sono uguali, 1 se il primo argomento è maggiore del secondo e -1 se il primo argomento è minore del secondo.
Nota sulla conversione di tipo: Quando si confrontano chiavi di tipi misti (ad esempio, string e interi), il confronto loosale di PHP nel callback può portare a risultati inattesi. Assicurarsi che il callback gestisca esplicitamente la conversione di tipo o utilizzi il confronto rigoroso (===) se è richiesta una corrispondenza precisa del tipo.
Un caso pratico: confronto delle chiavi senza distinzione di maiuscole e minuscole
L'esempio precedente si comporta esattamente come il più semplice array_diff_key(). Il callback personalizzato diventa utile solo quando il confronto stesso è non banale — ad esempio, quando si vogliono confrontare le chiavi indipendentemente dalla distinzione tra maiuscole e minuscole:
Anche se "Host" e "PORT" differiscono per maiuscole e minuscole da "host" e "port", strcasecmp le tratta come chiavi uguali, quindi vengono rimosse. Solo Debug, che non ha corrispondenza in $defaults, sopravvive:
Array
(
[Debug] => 1
)Un semplice array_diff_key() qui avrebbe mantenuto tutte e tre le voci, perché "Host" !== "host". Questa differenza è esattamente il momento in cui array_diff_ukey() è lo strumento giusto.
Conclusione
La funzione array_diff_ukey() confronta gli array tramite le loro chiavi usando un callback fornito dall'utente, restituendo le voci del primo array le cui chiavi sono assenti dagli altri. Usarla quando l'uguaglianza delle chiavi richiede una logica personalizzata; ricorrere al più semplice array_diff_key() quando un confronto rigoroso delle chiavi è sufficiente.
Funzioni correlate da conoscere:
- array_diff_key() — confronto delle chiavi senza callback.
- array_diff_uassoc() — confronta sia le chiavi (con un callback) che i valori.
- array_udiff() — confronta i valori con un callback.
- array_intersect_ukey() — l'inverso: mantiene le voci le cui chiavi corrispondono.