Поведение 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)
Я действительно запутался и жду хорошего объяснения ...