我有这段代码来区分两个对象数组:
$diff = array_udiff($a, $b,
function($obj_a, $obj_b) {
return $obj_a->id - $obj_b->id;
}
);
$ a是
[
{
"id": "7",
"attribute": "instagram"
},
{
"id": "8",
"attribute": "snapchat"
},
{
"id": "9",
"attribute": "facebook"
}
]
$ b是
[
{
"id": "7",
"attribute": "instagram",
"value": "somevalue"
}
]
$ diff应该返回对象数组
[
{
"id": "8",
"attribute": "snapchat"
},
{
"id": "9",
"attribute": "facebook"
}
]
它确实如此,但只有当$ b是一个空数组时。结果是正确的(我得到一个对象数组,$ a,因为$ b是空的)。
但是当$ b中至少有一个对象时,$ diff会向我返回以下我不想要的内容。
{
"1": {
"id": "8",
"attribute": "snapchat"
},
"2": {
"id": "9",
"attribute": "facebook"
}
}
如何在结果中获取对象数组而不是上面的?为什么两个结果之间存在差异?感谢。
答案 0 :(得分:5)
您只需在$diff = array_values($diff);
之前使用json_encode
,以便索引从零开始。
当您执行array_udiff
时,$a
的密钥会被保留,因此$diff
的密钥从1开始而不是0.为了json_encode
编码数组作为JSON数组而不是JSON对象,键必须是顺序的并从零开始。 array_values
将重新索引数组,以便满足此条件。
为了清楚起见,即使其他项目已从数组中删除而不是从第一个项目中删除,因此索引仍以零开头,因为缺少键,您仍需要重新索引$diff
。 / p>