Поведение array_diff_uassoc не ясно

Прежде всего я должен упомянуть, что я копался в руководствах и документах php и не нашел ответа. Вот код, который я использую:

class chomik {

    public $state = 'normal';
    public $name = 'no name';

    public function __construct($name) {
        $this->name = $name;
    }

    public function __toString() {
        return $this->name . " - " . $this->state;
    }
}

function compare($a, $b) {
    echo("$a : $b<br/>");
    if($a != $b) {
        return 0;
    }
    else return 1;
}

$chomik = new chomik('a');
$a = array(5, $chomik, $chomik, $chomik);
$b = array($chomik, 'b', 'c', 'd');
array_diff_uassoc($a, $b, 'compare');

То, что я думал, array_diff_uassoc будет сравнивать все значения этих двух массивов, и если значения существуют, то будет запускаться сравнение ключей. И вывод этого кода:

1 : 0
3 : 1
2 : 1
3 : 2
1 : 0
3 : 1
2 : 1
3 : 2
3 : 3
3 : 2
2 : 3
1 : 3
0 : 3

Итак, прежде всего, почему некоторые пары (1: 0 или 3: 1) дублируются? Значит ли это, что функция забыла, что она уже сравнивала эти элементы Я думал, что он будет сравнивать все пары по значению, но я не вижу его в выводе. Я что-то пропустил?

Итак, вопрос: каково точное поведение этой функции с точки зрения порядка сравнения, и почему я вижу это дубликаты? (моя версия PHP, если это поможет: версия PHP 5.3.6-13ubuntu3.6)

Я действительно запутался и жду хорошего объяснения ...

Ответы на вопрос(3)

Ваш ответ на вопрос