首先,我需要提到的是,我深入研究了手册和 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)
我真的很困惑,等待一些好的解释......