Funzione PHP Intersect: Guida a array_intersect
Scopri come usare array_intersect() in PHP per trovare i valori comuni tra due o più array, con esempi pratici e casi d'uso.
La funzione array_intersect() confronta due o più array e restituisce i valori che hanno tutti in comune. È una delle operazioni sugli insiemi di array più utili di PHP — comoda ogni volta che si vuole rispondere alla domanda "quali elementi compaiono in ogni lista?", ad esempio per trovare tag condivisi, permessi comuni o prodotti presenti in due cataloghi.
Questo capitolo tratta la sintassi, come funzionano in pratica il confronto e la preservazione delle chiavi, gli errori comuni in cui ci si imbatte (confronto libero, corrispondenza solo per valori) e alcuni esempi eseguibili.
Sintassi
array_intersect(array $array, array ...$arrays): array$array— l'array i cui valori vengono verificati rispetto a tutti gli altri....$arrays— uno o più array aggiuntivi con cui fare il confronto.
La funzione restituisce un nuovo array contenente ogni elemento del primo array il cui valore è presente in tutti gli altri array. Gli array originali rimangono invariati.
Due dettagli importanti da ricordare:
- Vengono confrontati solo i valori, non le chiavi. Le chiavi vengono ignorate nella corrispondenza, ma le chiavi del primo array sono preservate nel risultato.
- Il confronto è libero per impostazione predefinita. Internamente PHP confronta gli elementi come string:
(string) $a === (string) $b. Quindi l'intero1e la string"1"vengono trattati come uguali. Usaarray_intersect_assoc()quando devono corrispondere anche le chiavi, oppurearray_intersect_key()per fare l'intersezione per chiavi invece che per valori.
Se uno degli argomenti è un array vuoto, il risultato è sempre vuoto — nulla può essere in comune con una lista che non ha elementi.
Esempi
Esempio 1: Intersezione di due array
Confronta due array e mantieni solo i valori presenti in entrambi.
Output:
Array
(
[2] => c
[3] => d
)"c" e "d" compaiono in entrambi gli array. Nota le chiavi: 2 e 3 provengono da $array1, il primo argomento — array_intersect() mantiene le chiavi originali invece di rinumerarle. Se hai bisogno di un indice sequenziale 0, 1, 2 …, racchiudi il risultato in array_values().
Esempio 2: Intersezione di più array
Puoi passare un numero qualsiasi di array. Un valore viene mantenuto solo se compare in ognuno di essi.
Output:
Array
(
)Il risultato è vuoto: nessun valore è condiviso da tutti e tre gli array. "c"/"d" mancano in $array3, e "e"/"f" mancano in $array1.
Esempio 3: Errore comune con il confronto libero
Poiché gli elementi vengono confrontati come string, i numeri e i loro equivalenti stringa corrispondono. Questo è il comportamento che sorprende di più le persone.
<?php
$numbers = array(1, 2, 3, 4);
$strings = array("2", "4", "6");
$result = array_intersect($numbers, $strings);
print_r($result);
?>Output:
Array
(
[1] => 2
[3] => 4
)L'intero 2 ha corrisposto alla string "2", e 4 ha corrisposto a "4" — anche se sono tipi diversi. I valori restituiti provengono dal primo array, quindi rimangono interi. Se la corrispondenza di tipo esatta è importante, filtra il risultato manualmente o usa una logica di confronto più rigorosa.
Quando usarla
Ricorri a array_intersect() quando vuoi i valori comuni tra le liste. Alcuni casi pratici:
- Trovare i ruoli che un utente ha in entrambi i due set di permessi.
- Mostrare i prodotti presenti in due inventari di negozi.
- Verificare quali campi richiesti sono effettivamente consentiti (
array_intersect($requested, $whitelist)).
Per l'operazione opposta — valori che non sono condivisi — vedi array_diff(). Per unire gli array invece di intersecarli, usa array_merge(), e per testare un singolo valore usa in_array().
Conclusione
array_intersect() restituisce i valori presenti in ogni array fornito, preservando le chiavi del primo argomento e confrontando gli elementi in modo libero come string. Ricorda di usare array_intersect_assoc() o array_intersect_key() quando le chiavi sono importanti, e array_values() quando vuoi che il risultato venga reindicizzato.