跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

如何在 PHP 响应中移除数组的非连续数字键(重置为连续数字索引)

当 php 数组使用非连续字符串数字键(如 `"1"`、`"2"`)时,可使用 `array_values()` 重置为从 0 开始的连续整数索引,从而消除原始键名并确保 js on 序列化输出为标准数组而非对象。 在 PHP 中,数组的键类型直接影响其 JSON 编码 行为:若键为 连续的整数索引 (如 0, 1, 2), json _encode() 会将其序列化为 JSON 数组([]);而若键为 字符串数字 (如 "1", "2")或 不连续整数 (如 1, 3),PHP 会将其视为关联数组,json_encode() 将输出 JSON 对象({})——这常导致 前端 解析失败或结构不符合预期。 针对你的示例:
$response = [ "example" => [ "1" => ["name" => "stan", "city" => "NY"], "2" => ["name" => "wilson", "city" => "FL"] ] ];
直接 json_encode($response) 会产生:
{"example":{"1":{"name":"stan","city":"NY"},"2":{"name":"wilson","city":"FL"}}}
⚠️ 此处 "example" 的值是一个对象(因键 "1"/"2" 是字符串),而非期望的数组。 立即学习 “ PHP免费学习笔记(深入) ”; PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 ✅ 正确做法是:对目标子数组调用 array_values() 重置键:
$response['example'] = array_values($response['example']); echo json_encode($response, JSON_PRETTY_PRINT);
输出结果变为:
{ "example": [ {"name": "stan", "city": "NY"}, {"name": "wilson", "city": "FL"} ] }
? 补充说明: array_values() 仅重置键,不改变值顺序或内容 ,安全可靠; 若原数组含混合键(如 "1", "abc", 3),array_values() 仍会统一转为 0, 1, 2…; 不要误用 array_merge($arr)(虽效果类似,但语义不清且有性能开销); 如需深度处理嵌套结构(多层索引数组),需递归调用或结合 array_map()。 总结:array_values() 是标准化 PHP 数组索引、确保 JSON 兼容性的首选工具——简洁、高效、无副作用。

相关文章