まず第一に、私はマニュアルと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 はこれら 2 つの配列のすべての値を比較し、値が存在する場合はキー比較を実行します。このコードの出力は次のとおりです。
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)
私は本当に混乱していて、それについての良い説明を待っています...