W3docs

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'intero 1 e la string "1" vengono trattati come uguali. Usa array_intersect_assoc() quando devono corrispondere anche le chiavi, oppure array_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.

php— editable, runs on the server

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.

php— editable, runs on the server

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.

Esercizi

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