array_values 的基本用法与语法要点
概念与返回值
在 PHP 中,array_values 是一个用于获取数组中所有值的内置函数,它会忽略原数组的键名并返回一个新的数组。核心特性是返回的数组下标从 0 开始重新编号,便于后续遍历和处理。
使用 array_values 可以实现简单的“值提取与重建索引”的操作,帮助你在数据输出和前端渲染时避免复杂的键名干扰。这是实现“快速获取数组的所有值”的关键步骤之一。
'张三', 'age' => 28, 'city' => '上海'];
$values = array_values($map);
print_r($values);
与 array_keys 的区别
如果你的目标是取出原数组的键名,应该使用 array_keys;而 array_values 则专注于取出值。理解这两者的分工,可以让数据提取过程更加清晰。
在组合使用上,很多场景会先通过 array_keys 提取键,再通过其他函数处理对应的值,两者互补,实现不同的数据提取需求。
1, 'b'=>2, 'c'=>3];
$keys = array_keys($assoc);
$values = array_values($assoc);
print_r($keys);
print_r($values);
array_values 的实战场景
将关联数组转换为纯数字下标的列表
常见场景是从 API 返回的关联数组转换为一个线性的数值下标列表,方便统一处理和输出。此时 array_values 可以直接完成转化,避免键名带来的额外复杂性。

需要注意的是,原有层级中的结构仍然保留在取出的值中,如要进一步扁平化需要额外处理。
'Alice', 'role' => 'admin', 'active' => true];
$flat = array_values($input);
print_r($flat);
与 array_map 结合进行数据处理
当需要对取出的值进行统一处理时,结合 array_map 可以实现批量变换,提升代码可读性与效率。
示例演示将取出的值统一转成大写或执行其他标准化变换,确保数据输出符合前端或下游系统的要求。
'alice', 'city' => 'beijing'];
$values = array_values($input);
$upper = array_map('strtoupper', $values);
print_r($upper);
处理多维数组取值的第一层
对于多维数组,array_values 只对第一层键进行重新索引,内部的多维结构会保持不变。这在处理对象数组或多维数据时非常直观。
如果需要进一步扁平化,请结合其他函数,如 array_merge、iterator 工具或自定义迭代逻辑;请记住 array_values 仅重建第一层索引。
1, 'name' => 'A'],['id' => 2, 'name' => 'B']
];
$rows = array_values($matrix);
print_r($rows);
常见误区与性能考虑
当你已经是数值索引时,array_values 是否有必要
如果数组本身已经是数值索引,再次执行 array_values 通常不会改变数据,但会确保结构的一致性,尤其是在混合来源的数据处理流程中。谨慎使用,避免无谓的拷贝。
在高并发或大数据量场景下,额外的内存消耗可能成为瓶颈,因此应评估是否需要重新索引,或改用原数组直接遍历。
对大型数据集的内存影响
array_values 会产生一个新的数组副本,因此会有额外的内存需求。在处理大型数据集时应避免重复拷贝,必要时可考虑逐步处理或使用生成器。
如果你的目标只是遍历值,可以直接使用 foreach 等迭代方式,不一定非要创建一个新数组来保存值。
实战示例代码全集
示例 1:快速提取对象数组中的某字段值
当从数据库或接口取出多条记录后,通常需要提取某个字段值形成数组。组合使用 array_column 与 array_values,可以高效完成这一任务。
下面的示例展示了从对象数组中提取 id 字段并重新编号索引的过程,便于后续排序或去重处理。
101, 'name'=>'Alice'],['id'=>102, 'name'=>'Bob'],['id'=>103, 'name'=>'Carol'],
];
$ids = array_values(array_column($records, 'id'));
print_r($ids);
示例 2:去除键名后再排序
在对来自不同源的数据进行排序前,通常需要先把值提取为一个纯数值数组。array_values 与 sort 的组合可以直接实现排序准备工作。
以下示例演示了从一个关联数组中取值后进行排序,确保输出的顺序可控。
9, 'a' => 2, 'm' => 5];
$values = array_values($assoc);
sort($values); // 由小到大排序
print_r($values);
示例 3:先过滤再取值实现规范化输出
在输出前对数据进行清洗,确保没有空值、NULL 或空字符串是一种常见需求。先使用 array_filter 过滤,再用 array_values 重建索引,可以得到结构统一的输出。
下面的示例展示了如何对混杂数据进行规范化输出,方便前端展示。
'apple', 1=>null, 2=>'banana', 5=>'', 7=>'cherry'];
$filtered = array_filter($input, function($v) { return !empty($v); });
$normalized = array_values($filtered);
print_r($normalized);


