W3docs

Guida Completa alla Funzione PHP array_uintersect_assoc

Scopri come PHP array_uintersect_assoc() calcola l'intersezione di array con verifica degli indici e una callback personalizzata per i valori.

array_uintersect_assoc() calcola l'intersezione di due o più array con un controllo aggiuntivo sugli indici, dove i valori vengono confrontati tramite una callback fornita dall'utente mentre le chiavi vengono confrontate con il confronto interno (loose). Restituisce le voci del primo array la cui chiave e il cui valore compaiono in tutti gli altri array.

La "u" nel nome indica confronto dei valori definito dall'utente; il suffisso _assoc significa le chiavi vengono controllate anch'esse. Quindi un elemento sopravvive solo se entrambe queste condizioni sono vere:

  • la sua chiave esiste in tutti gli altri array (confrontata con il confronto standard di PHP), e
  • la tua callback considera il suo valore uguale all'elemento corrispondente in ogni altro array.

Questo la rende la versione rigorosa di array_intersect(), che ignora le chiavi e usa il confronto per stringa. Usa array_uintersect_assoc() quando la corrispondenza delle chiavi è importante e hai bisogno di un confronto dei valori personalizzato — ad esempio confronto case-insensitive, confronto di oggetti, o corrispondenza di numeri con una tolleranza.

Sintassi

array_uintersect_assoc(array $array1, array $array2, ...$arrays, callable $value_compare_func): array

La callback è sempre l'ultimo argomento. Tutto ciò che la precede è un array da intersecare.

Parametri

ParametroDescrizione
$array1L'array base. Chiavi e valori di questo array vengono preservati nel risultato.
$array2, ...Uno o più array da confrontare con $array1.
$value_compare_funcUna callback che confronta due valori e restituisce un intero.

Valore restituito

Un array associativo contenente ogni voce di $array1 la cui chiave è presente in tutti gli altri array e il cui valore la callback considera uguale in tutti. Le chiavi vengono preservate da $array1.

La funzione callback

La callback riceve due valori e deve restituire un intero che li ordina, esattamente come le funzioni di confronto usate da usort():

  • 0 quando i due valori sono considerati uguali,
  • un numero negativo (< 0) quando il primo è "minore" del secondo,
  • un numero positivo (> 0) quando il primo è "maggiore" del secondo.

Due valori vengono trattati come corrispondenti solo quando la callback restituisce 0. Funzioni integrate come strcasecmp() (confronto di stringhe case-insensitive) e strcmp() seguono già questo contratto, motivo per cui possono essere passate direttamente.

Esempi

Esempio 1: Intersezione di base su tre array

php— editable, runs on the server

Output:

Array
(
    [c] => cherry
)

Solo c => cherry sopravvive. apple è in $array1 e $array3 ma manca da $array2; banana è in $array1 e $array2 ma manca da $array3. Solo cherry compare sotto la stessa chiave c in tutti e tre gli array, quindi è l'unica corrispondenza. Nota che la chiave c viene preservata da $array1.

Esempio 2: Corrispondenza dei valori case-insensitive

php— editable, runs on the server

Output:

Array
(
    [c] => Cherry
)

I valori differiscono per maiuscole/minuscole tra gli array (Cherry vs cherry), ma poiché strcasecmp confronta senza distinguere tra maiuscole e minuscole, la callback li considera comunque uguali. Il risultato mantiene il valore così come appare in $array1 (Cherry).

Esempio 3: Perché il controllo degli indici è importante

La parte "assoc" è più facile da vedere quando lo stesso valore si trova sotto chiavi diverse:

<?php

$array1 = array('x' => 'red', 'y' => 'green', 'z' => 'blue');
$array2 = array('x' => 'red', 'w' => 'green', 'z' => 'BLUE');

$result = array_uintersect_assoc($array1, $array2, "strcasecmp");

print_r($result);

?>

Output:

Array
(
    [x] => red
    [z] => blue
)

red corrisponde perché condivide la chiave x in entrambi gli array. blue/BLUE corrisponde perché condividono la chiave z e strcasecmp ignora le maiuscole. Ma green viene escluso: si trova sotto la chiave y nel primo array e sotto la chiave w nel secondo, quindi le chiavi non coincidono. Se usassi il semplice array_uintersect(), green verrebbe incluso perché le chiavi verrebbero ignorate.

Funzioni correlate

Conclusione

array_uintersect_assoc() mantiene le voci del primo array la cui chiave compare in tutti gli altri array e il cui valore la callback considera uguale in tutti. Usala quando le chiavi sono significative e la corrispondenza dei valori richiede una logica personalizzata. Se hai bisogno anche di controllare come vengono confrontate le chiavi, usa array_uintersect_uassoc(); se il confronto per stringa dei valori è sufficiente, il più semplice array_intersect_assoc() fa al caso tuo.

Esercizio

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