array_diff_uassoc

(PHP 5)

array_diff_uassocComputes the difference of arrays with additional index check which is performed by a user supplied callback function

Opis

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 sa 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.

Przykład #1 Przykład użycia array_diff_uassoc()

<?php
function funk_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"funk_porownujaca");
print_r($wynik);
?>

Powyższy przykład wyświetli:

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ę.

Informacja: Funkcja ta sprawdza tylko jeden wymiar n-wymiarowej tablicy. Można sprawdzać głębsze wymiary przez użycie, na przykład array_diff_uassoc($tablica1[0], $tablica2[0], 'funkcja_zwrotna');.

Patrz także: array_diff(), array_diff_assoc(), array_udiff(), array_udiff_assoc(), array_udiff_uassoc(), array_intersect(), array_intersect_assoc(), array_uintersect(), array_uintersect_assoc() i array_uintersect_uassoc().

add a note add a note

User Contributed Notes 2 notes

up
1
MD. ABU SAYEM
1 month ago
//array_diff_uassoc for multidimenssional array
$color_1=array('a'=>'white','b'=>'red','c'=>array('a'=>'green','b'=>'blue','c'=>'yellow'));
$color_2=array('a'=>'white','b'=>'red','c'=>array('a'=>'white','b'=>'red','c'=>'yellow'));

function key_compare($a,$b){
    if($a===$b)        return 0;
    return($a>$b)?1:-1;
}
print_r(array_diff_uassoc($color_1['c'], $color_2['c'],"key_compare"));

//Output
 Array
(
    [a] => green
    [b] => blue
)
up
-2
anton-website at mail dot ru, Anton
2 months ago
Странно в документации почему-то не сказано,
 как выводить callback функцию если она является методом класса?
Ответ: в этом случае вид callback function должен быть
"Class::key_compare_func "
Как на  примере:

    public function arrayDiffUAssoc ($arrOne, $arrTwo, $funcallbac){
        if (is_array($arrOne) && is_array($arrTwo) && !empty($funcallbac))
            return array_diff_uassoc ($arrOne, $arrTwo, __CLASS__'::'.$funcallbac);
        else
            return 'Ошибка в '.__METHOD__.': Аргументы должны быть массивами и существовать callbac function';
    }
   
    public function key_compare_func ($a, $b) {
       if ($a === $b)
        {
           return 0;
       }
 
       return ($a>$b) ? 1 : -1;
   }
To Top