Forum und email

array_udiff_uassoc

(PHP 5)

array_udiff_uassoc — Sammensætter forskellen på arrays med et ekstra tjek på nøgler og både værdier og nøgler bliver tjekket ved hjælp af en callback funktion.

Beskrivelse

array array_udiff_uassoc ( array $array1 , array $array2 [, array $ ... ], callback $data_compare_func , callback $key_compare_func )

array_udiff_uassoc() returnerer et array der indeholder alle værdier fra array1 som ikke findes i nogen af de andre argumenter. Bemærk at nøglerne bliver brugt til sammenligningen hvilket er modsat array_diff() and array_udiff(). Sammenligningen af arrays bliver gjort ved en brugertilføjet callback funktion: data_compare_func . Dette er til forskel frem for array_diff_assoc() hvilket bruger en intern funktion til sammenligningen. Nøglerne bliver tjekke ved callback funktionen key_compare_func . Denne ting er modsat hvad array_udiff_assoc() gør, da den sidste sammenligner nøglerne ved brug af en intern funktion i php.

Example#1 array_udiff_uassoc() eksempel

<?php
class cr {
    private 
$priv_member;
    function 
cr($val
    {
        
$this->priv_member $val;
    }

    function 
comp_func_cr($a$b
    {
        if (
$a->priv_member === $b->priv_member) return 0;
        return (
$a->priv_member $b->priv_member)? 1:-1;
    }
    
    function 
comp_func_key($a$b
    {
        if (
$a === $b) return 0;
        return (
$a $b)? 1:-1;
    }
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), => new cr(23), 1=> new cr(4), => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), => new cr(3), 1=> new cr(4), => new cr(-15),);

$result array_udiff_uassoc($a$b, array("cr""comp_func_cr"), array("cr""comp_func_key"));
print_r($result);
?>

Ovenstående eksempel vil udskrive:

Array
(
    [0.1] => cr Object
        (
            [priv_member:private] => 9
        )

    [0.5] => cr Object
        (
            [priv_member:private] => 12
        )

    [0] => cr Object
        (
            [priv_member:private] => 23
        )
)

I vores eksempel ovenfor, kan du se at "1" => new cr(4) indgår i begge arrays og derfor vil det ikke fremgå i det resulterende array. Husk at du skal tilføje 2 callback funktioner.

Til sammenligning bliver den tilføjede callback funktion brugt. Den skal returnere et tal mindre, samme som, eller større end null, hvis det første argument skal bestemmes til at være enten mindre end, det samme som, eller større end det andet argument.

Note: Bemærk også at denne funktion kun tjekker en dimension af et fler-dimensioneret array. Man kan selvfølgelig tjekke dybere i dimensionerne ved at bruge f.eks. array_udiff_uassoc($array1[0], $array2[0], "data_compare_func", "key_compare_func");.

Se også array_diff(), array_diff_assoc(), array_diff_uassoc(), array_udiff(), array_udiff_assoc(), array_intersect(), array_intersect_assoc(), array_uintersect(), array_uintersect_assoc() og array_uintersect_uassoc().