Forum und email

array_udiff_uassoc

(PHP 5)

array_udiff_uassoc — Berekent het verschil tussen arrays met een aanvullende index controle, vergelijkt data en indices met een gebruikersfunctie

Beschrijving

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

array_udiff_assoc() geeft een array terug die alle waarden van array1 bevat die niet voorkomen in de andere argumenten. Let erop dat de keys worden gebruikt voor de vergelijking, dit in tegenstelling tot array_diff() en array_udiff(). De vergelijking van de array data wordt uitgevoerd door een gebruikersfunctie : data_compare_func . Dit in tegenstelling tot array_diff_assoc(), waarbij de vergelijking wordt gedaan door een interne functie. De vergelijking van de keys (indices) wordt ook uitgevoerd door de gebruikersfunctie key_compare_func . Dit in tegenstelling tot wat array_udiff_assoc() doet, omdat laatstgenoemde de indices vergelijkt met een interne functie.

Example#1 array_udiff_uassoc() voorbeeld

<?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);
?>

Het resultaat van dit script is als volgt:

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

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

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

In ons voorbeeld zie je dat het "1" => new cr(4) paar voorkomt in beide arrays en dus ontbreekt in het resultaat van de functie. Denk eraan dat je twee gebruikersfuncties moet opgeven.

Voor de vergelijking wordt een gebruikersfunctie toegepast. Deze moet een integer teruggeven die kleiner dan, gelijk aan of groter dan 0 moet zijn, wanneer het eerste argument respectievelijk kleiner dan, gelijk aan of groter dan 0 wordt beschouwd dan het tweede argument.

Note: Let erop dat deze functie slechts een dimensie van een n-dimensionale array controleert. Het is uiteraard mogelijk om diepere dimensies te controleren, bijvoorbeeld via array_udiff_uassoc($array1[0], $array2[0], "data_compare_func", "key_compare_func");.

Zie ook array_diff(), array_diff_assoc(), array_diff_uassoc(), array_udiff(), array_udiff_assoc(), array_intersect(), array_intersect_assoc(), array_uintersect(), array_uintersect_assoc() en array_uintersect_uassoc().