Поведение 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 Version 5.3.6-13ubuntu3.6)

Я действительно смущен и жду подробного объяснения этого …