我尝试使用array_udiff比较两个数组,但结果很奇怪。看起来array_udiff没有得到正确的答案。这里是实时演示。结果应该是一个空数组,但留下了一个未被过滤的元素。
<?php
$string = '{
"sakiniai": [
{
"Faktas": "A",
"value": "true"
},
{
"Faktas": "B",
"value": "true"
},
{
"Faktas": "A",
"value": "false"
}
]
}';
$sakiniais = json_decode($string, true)['sakiniai'];
$v = $sakiniais[0];
$arr[] = $v;
$v['value'] = $v['value'] == "true" ? "false" : "true";
$arr[] = $v;
var_dump($arr);
var_dump($sakiniais);
print_r(array_udiff($arr, $sakiniais, function($a, $b){
/*
var_dump($a);
var_dump($b);
var_dump($a == $b);
echo "\n\n\n";
*/
return $a == $b ? 0 : -1;}
));
输出
array(2) {
[0]=>
array(2) {
["Faktas"]=>
string(1) "A"
["value"]=>
string(4) "true"
}
[1]=>
array(2) {
["Faktas"]=>
string(1) "A"
["value"]=>
string(5) "false"
}
}
array(3) {
[0]=>
array(2) {
["Faktas"]=>
string(1) "A"
["value"]=>
string(4) "true"
}
[1]=>
array(2) {
["Faktas"]=>
string(1) "B"
["value"]=>
string(4) "true"
}
[2]=>
array(2) {
["Faktas"]=>
string(1) "A"
["value"]=>
string(5) "false"
}
}
Array
(
[1] => Array
(
[Faktas] => A
[value] => false
)
)