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