广告

PHP 中 array_values 的用法全解:如何快速获取数组的所有值(含实战示例)

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 可以直接完成转化,避免键名带来的额外复杂性。

PHP 中 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_mergeiterator 工具或自定义迭代逻辑;请记住 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);

广告

后端开发标签