with an xDict object no matter the data your xDict object contains you can use Differences functions<br>
 
normally  without stress of invalid data types errors.Of course for the methods<br>
 
which allow user defined callback you can use any type of callback(closure,normal function,classes non <br>static methods
 
or static methods as stated in the PHP doc.<br>
 
for the highlighted following sources you got the result below each source:<br><?php 
 
require_once('./../xdict.class.php');
 
echo '<pre>';
 
highlight_string('<?php
 
 $x=xdict(0,\'\',false);
 
$x->fill_with(array("a" => "vert", "b" => "marron", "c" => "bleu", "rouge"));
 
$array2 = array("a" => "vert", "jaune", "rouge");
 
$result =$x->diff_assoc($array2);
 
print_r($result);
 
 ?>');
 
$x=xdict(0,'',false);
 
$x->fill_with(array("a" => "vert", "b" => "marron", "c" => "bleu", "rouge"));
 
$array2 = array("a" => "vert", "jaune", "rouge");
 
$result =$x->diff_assoc($array2);
 
print_r($result);
 
 
highlight_string('<?php 
 
$x=xdict(0,\'\',false);
 
$x->fill_with(array(\'blue\'  => 1, \'red\'  => 2, \'green\'  => 3, \'purple\' => 4));
 
$array2 = array(\'green\' => 5, \'blue\' => 6, \'yellow\' => 7, \'cyan\'   => 8);
 
 
print_r($x->diff_key($array2));
 
?>');
 
$x=xdict(0,'',false);
 
$x->fill_with(array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4));
 
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
 
 
print_r($x->diff_key($array2));
 
 
highlight_string('<?php 
 
function key_compare_func($a, $b)
 
{
 
    if ($a === $b) {
 
        return 0;
 
    }
 
    return ($a > $b)? 1:-1;
 
}
 
 
$x=xdict(0,\'\',false);
 
$x->fill_with(array("a" => "vert", "b" => "marron", "c" => "bleu", "rouge"));
 
$array2 = array("a" => "vert", "jaune", "rouge");
 
$result = $x->diff_uassoc($array2, "key_compare_func");
 
print_r($result);
 
?>');
 
function key_compare_func($a, $b)
 
{
 
    if ($a === $b) {
 
        return 0;
 
    }
 
    return ($a > $b)? 1:-1;
 
}
 
 
$x=xdict(0,'',false);
 
$x->fill_with(array("a" => "vert", "b" => "marron", "c" => "bleu", "rouge"));
 
$array2 = array("a" => "vert", "jaune", "rouge");
 
$result = $x->diff_uassoc($array2, "key_compare_func");
 
print_r($result);
 
 
 
highlight_string('<?php 
 
function key_compare_func2($key1, $key2)
 
{
 
    if ($key1 == $key2)
 
        return 0;
 
    else if ($key1 > $key2)
 
        return 1;
 
    else
 
        return -1;
 
}
 
 
$x=xdict(0,\'\',false);
 
$x->fill_with( array(\'blue\'  => 1, \'red\'  => 2, \'green\'  => 3, \'purple\' => 4));
 
$array2 = array(\'green\' => 5, \'blue\' => 6, \'yellow\' => 7, \'cyan\'   => 8);
 
 
print_r($x->diff_ukey($array2, \'key_compare_func2\'));
 
 
?>');
 
function key_compare_func2($key1, $key2)
 
{
 
    if ($key1 == $key2)
 
        return 0;
 
    else if ($key1 > $key2)
 
        return 1;
 
    else
 
        return -1;
 
}
 
 
$x=xdict(0,'',false);
 
$x->fill_with( array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4));
 
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
 
 
print_r($x->diff_ukey($array2, 'key_compare_func2'));
 
 
 
highlight_string('<?php
 
$x=xdict(0,\'\',false);
 
$x->fill_with(array("a" => "green", "red", "blue", "red"));
 
$array2 = array("b" => "green", "yellow", "red");
 
$result = $x->diff($array2);
 
 
print_r($result);
 
 ?>');
 
$x=xdict(0,'',false);
 
$x->fill_with(array("a" => "green", "red", "blue", "red"));
 
$array2 = array("b" => "green", "yellow", "red");
 
$result = $x->diff($array2);
 
 
print_r($result);
 
highlight_string('<?php 
 
class cr {
 
    private $priv_member;
 
    function cr($val)
 
    {
 
        $this->priv_member = $val;
 
    }
 
 
    static function comp_func_cr($a, $b)
 
    {
 
        if ($a->priv_member === $b->priv_member) return 0;
 
        return ($a->priv_member > $b->priv_member)? 1:-1;
 
    }
 
    
 
    static function comp_func_key($a, $b)
 
    {
 
        if ($a === $b) return 0;
 
        return ($a > $b)? 1:-1;
 
    }
 
}
 
 
$x=xdict(0,\'\',false);
 
$x->fill_with(array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),));
 
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
 
 
$result =$x->udiff_assoc($b, array("cr", "comp_func_cr"));
 
print_r($result);
 
$result =$x->udiff_uassoc($b, array("cr", "comp_func_cr"), array("cr", "comp_func_key"));
 
print_r($result);
 
 
?>');
 
class cr {
 
    private $priv_member;
 
    function cr($val)
 
    {
 
        $this->priv_member = $val;
 
    }
 
 
    static function comp_func_cr($a, $b)
 
    {
 
        if ($a->priv_member === $b->priv_member) return 0;
 
        return ($a->priv_member > $b->priv_member)? 1:-1;
 
    }
 
    
 
    static function comp_func_key($a, $b)
 
    {
 
        if ($a === $b) return 0;
 
        return ($a > $b)? 1:-1;
 
    }
 
}
 
 
$x=xdict(0,'',false);
 
$x->fill_with(array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),));
 
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
 
 
$result =$x->udiff_assoc($b, array("cr", "comp_func_cr"));
 
print_r($result);
 
$result =$x->udiff_uassoc($b, array("cr", "comp_func_cr"), array("cr", "comp_func_key"));
 
print_r($result);
 
 
highlight_string('<?php 
 
$x=xdict(0,\'\',false);
 
$x->fill_with(array(new stdclass, new stdclass,
 
                new stdclass, new stdclass,
 
               ));
 
 
$array2 = array(
 
                new stdclass, new stdclass,
 
               );
 
 
 
$x[0]->width = 11; $x[0]->height = 3;
 
$x[1]->width = 7;  $x[1]->height = 1;
 
$x[2]->width = 2;  $x[2]->height = 9;
 
$x[3]->width = 5;  $x[3]->height = 7;
 
 
$array2[0]->width = 7;  $array2[0]->height = 5;
 
$array2[1]->width = 9;  $array2[1]->height = 2;
 
 
function compare_by_area($a, $b) {
 
    $areaA = $a->width * $a->height;
 
    $areaB = $b->width * $b->height;
 
    
 
    if ($areaA < $areaB) {
 
        return -1;
 
    } elseif ($areaA > $areaB) {
 
        return 1;
 
    } else {
 
        return 0;
 
    }
 
}
 
 
print_r($x->udiff( $array2, \'compare_by_area\'));
 
?>');
 
 
 
$x=xdict(0,'',false);
 
$x->fill_with(array(new stdclass, new stdclass,
 
                new stdclass, new stdclass,
 
               ));
 
 
$array2 = array(
 
                new stdclass, new stdclass,
 
               );
 
 
 
$x[0]->width = 11; $x[0]->height = 3;
 
$x[1]->width = 7;  $x[1]->height = 1;
 
$x[2]->width = 2;  $x[2]->height = 9;
 
$x[3]->width = 5;  $x[3]->height = 7;
 
 
$array2[0]->width = 7;  $array2[0]->height = 5;
 
$array2[1]->width = 9;  $array2[1]->height = 2;
 
 
function compare_by_area($a, $b) {
 
    $areaA = $a->width * $a->height;
 
    $areaB = $b->width * $b->height;
 
    
 
    if ($areaA < $areaB) {
 
        return -1;
 
    } elseif ($areaA > $areaB) {
 
        return 1;
 
    } else {
 
        return 0;
 
    }
 
}
 
 
print_r($x->udiff( $array2, 'compare_by_area'));
 
?>
 
 |