W3docs

Funzione PHP Array Intersect_Assoc

La funzione array_intersect_assoc in PHP confronta due o più array e restituisce solo gli elementi che corrispondono per chiave e valore in ogni array.

La funzione PHP array_intersect_assoc() confronta due o più array e restituisce solo le voci che corrispondono sia per chiave che per valore in ogni array. A differenza di array_intersect(), che ignora le chiavi e considera solo i valori, array_intersect_assoc() mantiene una coppia solo quando la stessa chiave contiene lo stesso valore in tutti gli array passati. Questo la rende lo strumento giusto quando la posizione o l'etichetta di un valore è importante quanto il valore stesso — ad esempio, nel confronto tra due array di configurazione o due righe con chiave per nome di campo.

Questa pagina tratta la firma della funzione, il funzionamento effettivo del confronto (incluso un dettaglio sottile su come vengono confrontati i valori), diversi esempi eseguibili, le insidie comuni e le funzioni correlate.

Sintassi

array_intersect_assoc(array $array, array ...$arrays): array
  • $array — l'array di base. Il risultato preserva le sue chiavi e i tipi di valore.
  • ...$arrays — uno o più array con cui confrontare. È necessario passarne almeno uno.

La funzione restituisce un nuovo array contenente ogni coppia chiave => valore del primo array la cui chiave e il cui valore compaiono anche in tutti gli altri array.

Come funziona

array_intersect_assoc() scorre ogni coppia chiave => valore nel primo array e cerca la stessa chiave in tutti gli altri array. Una coppia sopravvive solo quando, per ogni altro array, quella chiave esiste e il suo valore è uguale.

Un dettaglio trae in inganno: il confronto dei valori non è stretto (===). Internamente PHP confronta i valori come stringhe, approssimativamente (string) $a === (string) $b. Quindi 1 (int) corrisponde a "1" (string) perché entrambi si trasformano in stringa come "1", ma false non corrisponde a 0 (si trasformano in "" e "0"). Le chiavi, come sempre negli array PHP, seguono le normali regole per le chiavi degli array.

Esempio di base

Qui l'unica coppia condivisa da entrambi gli array — stessa chiave, stesso valore — è "a" => "green":

php— editable, runs on the server

L'output di questo codice sarebbe:

Array
(
    [a] => green
)

"b" viene scartato perché i valori differiscono (brown vs yellow), e "c" viene scartato per lo stesso motivo (blue vs red). Il "red" senza chiave esplicita in $array1 ha la chiave intera 0, che non esiste in $array2, quindi viene escluso. Questa è la differenza rispetto a array_intersect(), che avrebbe abbinato red solo per valore.

Confronto tra tre o più array

Una coppia deve corrispondere in tutti gli array per sopravvivere. L'aggiunta di un terzo array restringe ulteriormente il risultato:

<?php

$array1 = array("a" => "green", "b" => "brown", "c" => "blue");
$array2 = array("a" => "green", "b" => "yellow");
$array3 = array("a" => "green", "c" => "blue");
$result = array_intersect_assoc($array1, $array2, $array3);
print_r($result);

?>

Output:

Array
(
    [a] => green
)

Solo "a" => "green" è presente in ogni array. "c" => "blue" è assente in $array2, quindi viene scartato.

Attenzione: confronto lasco dei valori

Poiché i valori vengono confrontati come stringhe, i valori di tipo misto possono corrispondere in modi sorprendenti:

<?php

$a = array("id" => 1,   "active" => false);
$b = array("id" => "1", "active" => 0);

print_r(array_intersect_assoc($a, $b));

?>

Output:

Array
(
    [id] => 1
)

id corrisponde perché 1 e "1" si trasformano entrambi in stringa come "1". Ma active viene scartato: false si trasforma in "" mentre 0 si trasforma in "0", quindi non sono uguali. Se si ha bisogno di un confronto rigoroso con verifica del tipo, confrontare gli array manualmente oppure usare array_uintersect_assoc() con una callback personalizzata.

Quando usarla

  • Confronto di array associativi in cui un valore è significativo solo alla sua chiave specifica — impostazioni, campi di un form, strutture simili a righe di database.
  • Ricerca delle voci comuni tra due istantanee degli stessi dati con chiave.

Se si vuole abbinare solo i valori indipendentemente dalla chiave, usare array_intersect(). Se si vuole abbinare solo le chiavi indipendentemente dal valore, usare array_intersect_key(). Per l'operazione opposta — voci presenti nel primo array ma non negli altri, confrontate per chiave e valore — vedere array_diff_assoc().

Diagramma

Una rappresentazione visiva di come array_intersect_assoc() filtra le coppie:

graph LR
A[Array 1: key-value pairs] -->|Compare keys & values| B[Array 2: key-value pairs]
B -->|Keep only matching pairs| C[Result Array]

Conclusione

array_intersect_assoc() restituisce le coppie chiave => valore comuni a tutti gli array forniti, abbinando sia la chiave che il valore (confrontato come stringa in modo lasco). Usarla quando sia l'etichetta che il valore di una voce devono corrispondere, e preferire array_intersect(), array_intersect_key() o array_uintersect_assoc() quando si ha bisogno di abbinamento solo per valore, solo per chiave o con confronto personalizzato rigoroso.

Esercizio

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