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