Forum und email

array_udiff_assoc

(PHP 5)

array_udiff_assoc — Berekent het verschil tussen arrays met een aanvullende index controle, vergelijkt data met een gebruikersfunctie

Beschrijving

array array_udiff_assoc ( array $array1 , array $array2 [, array $ ... ], callback $data_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. Dit in tegenstelling tot array_diff_assoc(), waarbij de vergelijking wordt gedaan door een interne functie.

Example#1 array_udiff_assoc() 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;
    }
}

$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_assoc($a$b, array("cr""comp_func_cr"));
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.

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_assoc($array1[0], $array2[0], "some_comparison_func");.

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