删除由 php unset 创建的数字键

Posted

技术标签:

【中文标题】删除由 php unset 创建的数字键【英文标题】:Removing number key create by php unset 【发布时间】:2020-09-30 15:27:09 【问题描述】:

我尝试根据当前日期和时间过滤 json 数据:

我的 json 是:

 "responseData": [  "totalValue": 0.0, "active": "Oct 16, 2019 11:16:23 AM", "expired": "Mar 28, 2020 3:15:58 PM" ,  "totalValue": 0.0, "active": "Oct 16, 2019 11:16:23 AM", "expired": "Mar 28, 2020 3:15:58 PM" ,  "totalValue": 0, "active": "Jun 25, 2019 6:34:59 PM", "expired": "Oct 16, 2020 11:10:32 AM",  ], "responseMessage": "success", "responseCode": 0 

通过 php 过滤是:

date_default_timezone_set('UTC'); json_decode($mybalance, true); foreach($json['responseData'] as $key=>$value) if(strtotime($value['expired']) < strtotime(date('M d, Y H:i:s A'))) unset($json['responseData'][$key]);  

在上面的代码中过滤了json,响应是

"responseData":"2":"totalValue":0,"active":"Jun 25, 2019 6:34:59 PM","expired":"Oct 16, 2020 11:10:32 AM","responseMessage":"success","responseCode":0

我的问题是,如何在 json 响应中删除“2”?

我预期的 json 响应是:

"responseData":"totalValue":0,"active":"Jun 25, 2019 6:34:59 PM","expired":"Oct 16, 2020 11:10:32 AM","responseMessage":"success","responseCode":0

这是我尝试过的完整脚本: https://3v4l.org/SPhRi

谢谢

【问题讨论】:

unset() 不会对数组重新编号。之后您可以在 responseData 上使用 array_values() 重新编号。 嗨@Michel,我尝试使用array_values($json['responseData'][$key]),但数据没有过滤。如果您不介意将array_values 放在哪里? 像现在一样先过滤,然后使用$json['responseData'] = array_values($json['responseData']); 我会把它作为答案,然后你可以接受并关闭问题。 【参考方案1】:

像现在一样先过滤,然后使用

$json['responseData'] = array_values($json['responseData']);

对数组重新编号。

【讨论】:

以上是关于删除由 php unset 创建的数字键的主要内容,如果未能解决你的问题,请参考以下文章

更好列表页中一个航班.先unset删除数组中一个键值对,再追加,最后按键排序

php 删除set unset删除cookie php

unset命令

PHP:setcookie() 和 unset() 不删除 cookie

PHP中unset,array_splice删除数组中元素的区别

(实用篇)PHP中unset,array_splice删除数组中元素的区别