
使用 `array_values()` 函数可快速将关联数组(含字符串键或不规则数字键)转换为从 0 开始的连续数字索引数组,适用于清理 api 响应中冗余的键名。
在 PHP 中,当你从 JSON 解析、数据库查询或外部接口获取数据时,常会遇到类似如下结构的响应:
$response = [
"example" => [
"1" => ["name" => "stan", "city" => "NY"],
"2" => ["name" => "wilson", "city" => "FL"]
]
];注意:"1" 和 "2" 是字符串键(而非整型),这类键虽可被遍历,但不符合标准「有序列表」语义,尤其在前端 JavaScript 处理或序列化为 JSON 时易引发歧义(例如 JSON 不保证对象键顺序,而数组则天然有序)。
✅ 正确做法是使用 array_values() 提取并重索引目标子数组:
// 仅对 example 子数组重置索引
$cleaned = [
"example" => array_values($response["example"])
];
// 输出结果:
// [
// "example" => [
// 0 => ["name" => "stan", "city" => "NY"],
// 1 => ["name" => "wilson", "city" => "FL"]
// ]
// ]⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- array_values() 仅重置键,不改变值的顺序,原始顺序完全保留;
- 它返回一个新数组,原数组不受影响(PHP 数组默认按值传递);
- 若需深层嵌套重索引(如多层 example.items.data),需递归调用或显式处理每一层;
- 不要误用 array_merge($arr) —— 虽然效果相似,但 array_values() 语义更清晰、性能略优,且专为此场景设计。
? 小技巧:配合 json_encode() 使用时,重索引后的数组会正确输出为 JSON 数组([]),而非 JSON 对象({}),这对前端消费更友好:
echo json_encode($cleaned, JSON_PRETTY_PRINT);
// → "example" 的值将被编码为 [...] 而非 {...}总结:array_values() 是 PHP 中标准化、轻量且语义明确的索引清理工具,推荐作为处理“伪数组”响应的首选方案。











