W3docs

Capire la funzione PHP array_intersect_uassoc

Scopri come funziona array_intersect_uassoc() in PHP: intersezione di array con confronto delle chiavi tramite callback personalizzata.

array_intersect_uassoc() calcola l'intersezione di due o più array — restituisce le voci del primo array il cui valore E chiave compaiono anche in tutti gli altri array. La particolarità di questa variante è la u nel nome: si fornisce una callback definita dall'utente che stabilisce quando due chiavi sono considerate uguali. I valori vengono ancora confrontati con il confronto integrato di PHP (lasso, con cast a string).

Questa pagina spiega come funziona la funzione, mostra un esempio verificato e indica quando usarla al posto delle altre varianti array_intersect_*.

Sintassi

array_intersect_uassoc(
    array $array,
    array ...$arrays,
    callable $key_compare_func
): array
  • $array — l'array da confrontare; le sue voci compaiono nel risultato.
  • ...$arrays — uno o più array da confrontare con il primo.
  • $key_compare_func — una callback che confronta due chiavi. Deve restituire un intero minore, uguale o maggiore di 0 quando la prima chiave è considerata minore, uguale o maggiore della seconda (lo stesso contratto di un comparatore usort).

La funzione restituisce un nuovo array contenente le voci corrispondenti di $array, preservandone le chiavi originali.

Come funziona la callback delle chiavi

A differenza di array_intersect_assoc(), che confronta le chiavi con ===, questa funzione delega il confronto delle chiavi alla propria callback. Ciò consente di implementare regole di corrispondenza che PHP non offre nativamente — chiavi case-insensitive, chiavi trimmate o ordinamento in base alla localizzazione.

Si noti la divisione delle responsabilità: le chiavi vengono confrontate dalla propria callback, ma i valori vengono ancora confrontati dalla funzione stessa (in modo lasso, come stringhe). Se si ha bisogno anche di un confronto personalizzato dei valori, usare array_uintersect_uassoc().

Esempio

<?php

// The callback receives two keys and must return an int:
// 0 = equal, -1 = first is smaller, 1 = first is larger.
function compareKeys($key1, $key2) {
    if ($key1 === $key2) {
        return 0;
    }
    return ($key1 > $key2) ? 1 : -1;
}

$array1 = ["a" => "green", "b" => "brown", "c" => "blue", "red"];
$array2 = ["a" => "green", "yellow", "red"];

$result = array_intersect_uassoc($array1, $array2, "compareKeys");

print_r($result);

?>

Output:

Array
(
    [a] => green
)

Solo "a" => "green" sopravvive, perché è l'unica voce la cui chiave e valore compaiono entrambi in $array2:

  • "b" => "brown" e "c" => "blue" — le chiavi non esistono in $array2.
  • 0 => "red" in $array1 — il valore "red" esiste in $array2, ma alla chiave 1, quindi le chiavi (0 vs 1) non corrispondono.

Quando usarla

Usa array_intersect_uassoc() quando hai bisogno di un'intersezione che tenga conto delle chiavi e le chiavi richiedono una logica di corrispondenza personalizzata. Un caso comune è la corrispondenza case-insensitive di intestazioni o colonne:

<?php

function ci_keys($k1, $k2) {
    return strcasecmp((string) $k1, (string) $k2);
}

$config   = ["Host" => "localhost", "Port" => 8080];
$expected = ["host" => "localhost", "PORT" => 8080];

print_r(array_intersect_uassoc($config, $expected, "ci_keys"));

?>

Questo mantiene Host => localhost e Port => 8080 perché la callback tratta Host/host e Port/PORT come la stessa chiave, mentre i valori corrispondono ancora.

Funzioni correlate

FunzioneConfronto chiaviConfronto valori
array_intersect()ignoratointegrato
array_intersect_assoc()===integrato
array_intersect_key()=== (solo chiavi)ignorato
array_intersect_ukey()callback (solo chiavi)ignorato
array_intersect_uassoc()callbackintegrato
array_uintersect_uassoc()callbackcallback

Conclusione

array_intersect_uassoc() restituisce le voci del primo array il cui valore e chiave compaiono in tutti gli altri array, permettendo di controllare la corrispondenza delle chiavi tramite una callback definita dall'utente. Usala quando un'intersezione associativa necessita di regole di chiave flessibili — come chiavi case-insensitive o trimmate — e ricorda che i valori vengono ancora confrontati con il confronto integrato di PHP.

Esercizio

Pratica
Qual è lo scopo della funzione array_intersect_uassoc() in PHP?
Qual è lo scopo della funzione array_intersect_uassoc() in PHP?
Was this page helpful?