gpt4 book ai didi

php - array_udiff 返回不同的结果

转载 作者:行者123 更新时间:2023-12-02 22:54:33 26 4
gpt4 key购买 nike

我有这段代码来获取两个对象数组之间的差异:

$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"
}
}

如何在结果中获取对象数组而不是上面的对象?以及为什么两个结果会有差异呢?谢谢。

最佳答案

您只需在 json_encode 之前使用 $diff = array_values($diff); 即可使索引从零开始。

当您执行array_udiff时,$a的键被保留,因此$diff的键从1开始,而不是0。为了让 json_encode 将数组编码为 JSON 数组而不是 JSON 对象,键必须是连续的并且从零开始。 array_values 将重新索引数组以满足此条件。

需要明确的是,即使从数组中删除了其他项目而不是第一个项目,因此索引仍然从零开始,您仍然需要重新索引 $diff 因为缺少 key 。

关于php - array_udiff 返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42866992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com