La funzione array_diff di PHP
La funzione array_diff in PHP confronta gli array e restituisce i valori presenti nel primo array ma non negli altri.
La funzione array_diff in PHP è una funzione integrata che confronta gli array e restituisce i valori presenti nel primo array ma non in nessuno degli altri. È utile ogni volta che occorre la differenza insiemistica tra liste — ad esempio, per confrontare dati provenienti da un database con valori inviati tramite un modulo, o per individuare gli elementi rimossi tra due istantanee di una lista.
Questo capitolo illustra come funziona array_diff, la sua sintassi, come gestisce chiavi e confronto dei valori, e le insidie più comuni. Fa parte dell'argomento array PHP.
Come funziona array_diff
La funzione array_diff confronta due o più array e restituisce un nuovo array contenente i valori presenti nel primo array ma in nessuno degli array successivi. Due punti sono fondamentali da comprendere:
- Il confronto è basato sui valori; le chiavi vengono ignorate. Solo i valori vengono confrontati, ma le chiavi del primo array sono conservate nel risultato (non vengono reindicizzate).
- I valori vengono confrontati come string. Internamente PHP tratta due elementi come uguali quando
(string) $a === (string) $b. Quindi l'intero1e la string"1"sono considerati lo stesso valore.
Sintassi
La sintassi della funzione array_diff è la seguente:
Sintassi della funzione array_diff di PHP
array array_diff (array $array1, array $array2 [, array $... ]);Il parametro array1 è il primo array — quello i cui valori si desidera mantenere. Il parametro array2 (e gli eventuali array aggiuntivi) sono gli array con cui confrontare. La funzione restituisce i valori di array1 che non si trovano in nessuno degli altri array.
Esempi
Vediamo alcuni esempi di come utilizzare la funzione array_diff nel codice PHP.
Esempio PHP dell'uso della funzione array_diff
Questo codice produrrà il seguente output:
Array ( [0] => 1 )Come si può vedere, la funzione array_diff ha restituito il valore 1, che è presente in $array1 ma non in $array2. Si noti che la chiave originale (0) del primo array viene conservata.
Esempio PHP con valori string (distinzione tra maiuscole e minuscole)
Questo codice produrrà il seguente output:
Array ( [1] => Banana )In questo esempio, il confronto tra string è sensibile alle maiuscole. Poiché 'Banana' non corrisponde esattamente a 'banana', viene restituito come differenza. La chiave 1 (la posizione originale di Banana) viene mantenuta nel risultato.
Confronto con più array
È possibile passare più di due array. Un valore viene mantenuto solo se è assente da tutti gli altri array:
<?php
$array1 = [1, 2, 3, 4, 5];
$array2 = [2, 4];
$array3 = [5];
$result = array_diff($array1, $array2, $array3);
print_r($result);
?>Output:
Array ( [0] => 1 [2] => 3 )I valori 2 e 4 vengono rimossi da $array2, e 5 viene rimosso da $array3, lasciando 1 e 3 con le loro chiavi originali.
Reindicizzazione del risultato
Poiché le chiavi originali vengono conservate, il risultato può presentare lacune nelle chiavi numeriche. Se si ha bisogno di un elenco indicizzato in modo sequenziale, è sufficiente racchiudere la chiamata in array_values():
<?php
$result = array_values(array_diff([1, 2, 3], [2]));
print_r($result);
?>Output:
Array ( [0] => 1 [1] => 3 )Attenzione: confronto lasco basato su string
Poiché gli elementi vengono confrontati come string, i tipi misti possono corrispondere in modo inatteso:
<?php
$result = array_diff(['1', '2', 3], [1, 2]);
print_r($result);
?>Output:
Array ( [2] => 3 )Qui '1' corrisponde a 1 e '2' corrisponde a 2 (confronto tra string), quindi rimane solo 3. Gli object e gli array come valori generano un avviso, poiché non possono essere convertiti in string in modo pulito.
Funzioni correlate
array_diff confronta solo i valori. PHP offre varianti per esigenze diverse:
array_diff_key()— confronta le chiavi invece dei valori.array_diff_assoc()— confronta sia le chiavi che i valori.array_intersect()— il contrario: restituisce i valori presenti in tutti gli array.array_merge()— combina gli array invece di sottrarli.
Conclusione
La funzione array_diff è uno strumento utile per confrontare gli array e trovare le differenze tra di essi. Che si lavori con dati provenienti da un database o semplicemente con elenchi di valori, la funzione array_diff consente di trovare rapidamente e facilmente i valori univoci di un array. Utilizzando questa funzione nel codice PHP, è possibile semplificare il processo di sviluppo e rendere più agevole il reperimento e l'elaborazione dei dati necessari.