array_diff_ukey
array_diff_ukey($array, $arrays, $key_compare_func)
Robi to samo co array_diff_key(): zwraca elementy pierwszej tablicy, których klucz nie występuje w pozostałych tablicach. Wartości nie grają roli. Klucze porównuje własną funkcją.
Parametry
- $array – tablica, z której się wybiera.
- $arrays – tablica, z którą się porównuje. Może to być kilka tablic, ich wartości nie są używane.
- $key_compare_func – ostatni parametr: funkcja porównująca dwa klucze. Zwraca liczbę ujemną, zero albo liczbę dodatnią, tak samo jak w uksort().
Przykłady
// pola, które formularz wysłał dodatkowo (nazwy bez względu na wielkość liter)
$allowed = array("name" => true, "email" => true);
$sent = array("Name" => "Piotr", "EMAIL" => "piotr@przyklad.pl", "admin" => "1");
echo json_encode(array_diff_ukey($sent, $allowed, "strcasecmp")); // {"admin":"1"}
// array_diff_key rozróżnia wielkość liter
echo implode(",", array_keys(array_diff_key($sent, $allowed))); // Name,EMAIL,admin
// własna reguła: kody „A-1” i „a1” są równe
$normalize = function ($k) { return strtolower(str_replace("-", "", $k)); };
$compare = function ($a, $b) use ($normalize) { return strcmp($normalize($a), $normalize($b)); };
echo json_encode(array_diff_ukey(array("A-1" => 5, "B-2" => 7), array("a1" => 0), $compare)); // {"B-2":7}
Na co uważać
- Funkcja porównująca musi zwracać liczbę ujemną, zero albo liczbę dodatnią. Funkcja function ($a, $b) { return $a > $b; } zwraca true i false. PHP 8 da z nią zły wynik i wypisze komunikat Deprecated.
- Klucze wyniku zostają z pierwszej tablicy, nawet jeśli różnią się od kluczy drugiej tablicy wielkością liter.
- Jeśli wielkość liter nie gra roli, wystarczy array_diff_key(). Listę nazw zamieni na tablicę kluczy array_flip().
- Funkcja strcasecmp() utożsamia wielkie i małe litery tylko przy literach bez znaków diakrytycznych.
Powiązane funkcje:
array_diff_key()
array_diff_uassoc()
array_intersect_ukey()
array_flip()
strcasecmp()