Notatki PHP

prywatne zapiski na kamieniu

array_diff_uassoc - Oblicza różnicę tablic z dodatkową kontrolą indeksu, która jest wykonywana przez funkcję zwrotną dostarczoną przez użytkownika.

array array_diff_uassoc ( array $tablica1 , array $tablica2 [, array $... ], callback $key_compare_func )

array_diff_uassoc() zwraca tablicę zawierającą wszystkie wartości z $tablica1, które nie są obecne w żadnym z pozostałych argumentów. Do porównania, w przeciwieństwie do funkcji array_diff(), używane są klucze tablic.

Porównanie jest dokonywane przy pomocy podanej funkcji zwrotnej. Musi ona zwracać liczbę całkowitą mniejszą, równą lub większą od zera jeśli pierwszy klucz jest uznawany za mniejszy, równy lub większy drugiego. Jest to zachowanie inne niż w funkcji array_diff_assoc(), gdzie do porównań kluczy używana jest wewnętrzna funkcja.   

 
function funkcja_porownujaca($a, $b)
{
    if ($a === $b) {
        return 0;
    }
    return ($a > $b)? 1:-1;
}
 
$tablica1 = array("a" => "zielony", "b" => "brązowy", "c" => "niebieski", "czerwony");
$tablica2 = array("a" => "zielony", "żółty", "czerwony");
$wynik = array_diff_uassoc($tablica1, $tablica2, "funkcja_porownujaca");
print_r($wynik);

Otrzymamy:

 
Array
(
    [b] => brązowy
    [c] => niebieski
    [0] => czerwony
)

W powyższym przykładzie para "a" => "zielony" jest obecna w obu tablicach, w związku z tym nie jest zwracana przez funkcję. Z kolei para 0 => "czerwony" jest zawarta w wyniku działania funkcji, ponieważ w drugim argumencie wartość "czerwony" ma klucz 1.

Równość dwóch indeksów jest sprawdzana przez podaną przez użytkownika funkcję.   

Weźmy dwie nieco inne tablice i porównajmy ich zawartość według klucza c:

 
$tablica1=array('a'=>'white','b'=>'red','c'=>array('a'=>'green','b'=>'blue','c'=>'yellow'));
$tablica2=array('a'=>'white','b'=>'red','c'=>array('a'=>'white','b'=>'red','c'=>'yellow'));
 
$wynik = array_diff_uassoc($tablica1['c'], $tablica2['c'], "funkcja_porownujaca");
print_r($wynik);

Wynik porównania to unikalne elementy pierwszej tablicy dla klucza c:

 
array (2)
a => "green" (5)
b => "blue" (4)