これは非常に単純な問題ですが、PHPのドキュメントではなぜそれが起こっているのか説明されていません。
私はこのコードを持っています:
var_dump($newattributes); var_dump($oldattributes);
var_dump(array_diff($newattributes, $oldattributes));
簡単にするために、実際に使用している構造の大部分を省略し(それぞれが117要素の長さであるため)、ケースにカットします。
$newattributes次のような配列が1つあります。
array(117){
// Lots of other attributes here
["deleted"] => int(1)
}
そして、$oldattributes次のように見える別の呼び出し:
array(117){
// Lots of other attributes here
["deleted"] => string(1) "0"
}
どちらが違うように見えますか?によるとarray_diff:いいえ。私が得る出力array_diffは次のとおりです。
array(0) { }
ドキュメントページを読みましたが、次のように書かれています。
(string)$ elem1 ===(string)$ elem2の場合に限り、2つの要素は等しいと見なされます。つまり、文字列表現が同じ場合。
そして、私は「1」がどのように「0」に等しいオブジェクトを作成できるかわかりません。
array_diffそれで、私は考慮しなかったいくつかの警告を見ていますか?