我在array_filter中遇到了一些奇怪的错误。
我的json数据如下所示:
$days_arr = array('9.10.','10.10.');
$result['data'] = array_filter($my_var['data'], function($v) use ($days_arr)
{
return in_array($v['date'], $days_arr);
});
return json_encode($result);
我可以使用以下代码删除一些对象:
$days_arr = array('9.10.','11.10.');
删除包含date = 9.10的对象。和10.10。
但问题是:我一使用{
"data": {
"0": {
"item": "book",
"date": "9.10."
},
"1": {
"item": "pen",
"date": "11.10"
}
}
}
我的输出是:
return FirstList.Cast<IInterface>().Concat(SecondList.Cast<IInterface>()).ToList();
正如您所看到的,发生了一些非常奇怪的错误,json格式错误。 9.10。和10.10。作品,10.10。和11.10。破坏输出。
谁可以提供帮助?
答案 0 :(得分:1)
巧合的是,您的第一个示例导致连续索引从0,0和1开始,因此json_encode()
将它们编码为动态分配。第二个示例产生索引0和2,因此它使用硬编码值。使用array_values()
重新编制索引:
$result['data'] = array_values($result['data']);
return json_encode($result);
答案 1 :(得分:0)
一些重要的事情:
array_filter
将保留通过过滤器的元素的键json_encode
将保留输出中的数组键“如果键不是从0开始的连续数字序列”因此,当您的$result
数组包含数组键0
和1
时,它们将在JSON输出中跳过。当它包含数组键0
和2
时(如第二个示例中所示),它们将被保留。
您可以通过移除json_encode
:
return json_encode(array_values($result));
这将使输出保持与输入相同的格式。见https://eval.in/877330