使用PHP重命名JSON子键时出现数字索引问题求助
问题原因分析
你代码的问题出在两个函数的误用:
array_push()仅适用于索引数组追加元素,会自动生成数字下标,所以才会出现你遇到的0键名问题,关联数组新增键值对直接赋值即可array_slice()是用来截取数组片段的函数,不能用来删除关联数组的指定键,删除指定键需要用unset()函数- 额外提醒:如果你需要保证数据和字段定义匹配,还要同步修改
data数组下每条记录的Name键为Task,否则后续数据读写会出现不对应的问题
修复后的完整代码
// 字符串需要加引号,原代码此处存在语法错误 $file = 'file.json'; $jsn = file_get_contents($file); $data = json_decode($jsn, true); // 重命名columns下的Name键为Task $data['columns']['Task'] = $data['columns']['Name']; // 删除旧的Name键 unset($data['columns']['Name']); // 可选:同步修改data数组中每条数据的Name键为Task,不需要可以删除这段 foreach ($data['data'] as &$item) { $item['Task'] = $item['Name']; unset($item['Name']); } // 释放引用变量,避免后续操作出现异常 unset($item); // JSON_UNESCAPED_UNICODE保证中文不会被转义,JSON_PRETTY_PRINT会格式化输出格式更易读 $jsn = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); file_put_contents($file, $jsn);
操作说明
- 不需要修改
data数组的键的话,直接删除掉foreach相关的代码段即可 - 代码修复了原代码中字符串未加引号、数组定义语法错误的问题,可直接运行
内容的提问来源于stack exchange,提问作者Maharlikan
相关产品推荐
相关产品推荐

