PHP如何读取JSON文件数组并按index值排序后返回JSON数组
PHP实现JSON数据按index字段升序排序并重置连续数字索引
实现步骤
- 读取目标JSON文件的内容,做基础的文件读取合法性校验
- 将读取到的JSON字符串解码为PHP关联数组,同时校验JSON格式合法性
- 对数组按元素的
index字段做升序排序,排序后自动重置数组键为从0开始的连续数字索引 - 将处理完成的数组重新编码为标准JSON格式输出
完整实现代码
<?php // 替换为你的JSON文件实际存储路径 $jsonFilePath = './your_data.json'; // 读取文件内容 $rawJson = file_get_contents($jsonFilePath); if ($rawJson === false) { exit('JSON文件读取失败,请检查文件路径和权限'); } // 解码JSON为关联数组 $arrayData = json_decode($rawJson, true); if (json_last_error() !== JSON_ERROR_NONE) { exit('JSON格式错误:' . json_last_error_msg()); } // 按index字段升序排序,usort会自动重置数组键为0起始的连续数字 usort($arrayData, function ($prev, $next) { return $prev['index'] - $next['index']; }); // 编码为标准JSON:JSON_PRETTY_PRINT输出格式化带缩进的结果,JSON_UNESCAPED_UNICODE避免中文转义,JSON_FORCE_OBJECT输出带数字键的对象结构,和预期格式完全匹配 $result = json_encode($arrayData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_FORCE_OBJECT); // 输出最终结果 echo $result; ?>
注意事项
- 不要使用
asort()、uasort()这类保留原键名的排序函数,否则无法得到从0开始的连续数字索引,usort()排序后会自动重建数字索引,完全匹配需求。 - 排序比较段直接计算两个元素
index字段的差值,即可实现数值型升序排列,如果需要降序排列,将返回值改为$next['index'] - $prev['index']即可。 - 如果不需要格式化输出带缩进的JSON,编码时去掉
JSON_PRETTY_PRINT参数即可,不影响数据正确性;如果需要输出无键名的标准数组格式JSON,去掉JSON_FORCE_OBJECT参数即可。
运行结果
针对提供的原始JSON输入,上述代码运行后输出的结果和预期完全一致:
{ "0": { "type": 12, "index": 115, "showType": 1, "achievementType": 0, "desc": "WING" }, "1": { "type": 12, "index": 116, "showType": 1, "achievementType": 0, "desc": "WING" }, "2": { "type": 12, "index": 117, "showType": 1, "achievementType": 0, "desc": "WING" }, "3": { "type": 12, "index": 118, "showType": 1, "achievementType": 0, "desc": "WING" }, "4": { "type": 12, "index": 119, "showType": 1, "achievementType": 0, "desc": "WING" } }
内容的提问来源于stack exchange,提问作者Phát papa
相关产品推荐
相关产品推荐

