如何使用PHP删除JSON编码数组中的指定值 现有代码不生效如何解决
PHP删除JSON数组指定元素问题修复
原有代码的问题
- 遍历数组时未获取对应键名:
foreach($decode as $post)只拿到了数组的值,没有拿到外层的键(也就是示例里的1、2、3),固定写unset($decode[1])只会删除键为1的元素,无法删除符合条件的对应元素 - 没有将修改后的数组重新写入JSON文件:仅修改了内存中的
$decode变量,没有同步更新到test.json文件,运行后原文件自然没有变化 - 存在语法错误:第一个
foreach循环缺少闭合的大括号 - 冗余逻辑:
$post[0]本身就是字符串格式的fileid,不需要强转数组遍历,属于无效代码
修复后的完整代码
<?php $filename = "test.json"; // 读取JSON文件内容,比fgets更稳妥不会漏读 $jsonContent = file_get_contents($filename); $decode = json_decode($jsonContent, true); // 遍历的时候同时获取键和值 foreach($decode as $key => $post){ $dif = time() - $post[1]; if($dif > 5){ // 输出对应的fileid echo $post[0].'<br>'; // 删除符合条件的对应键的元素 unset($decode[$key]); } } // 将修改后的数组重新编码为JSON写回文件 file_put_contents($filename, json_encode($decode)); ?>
注意事项
- 如果JSON数据里的
time不是Unix时间戳格式,需要先将其转换为时间戳再做差值计算 - 要保证
test.json文件有可写权限,否则写回操作会失败
内容的提问来源于stack exchange,提问作者Dinesh chandra
相关产品推荐
相关产品推荐

