php怎么获得数组的键和值?array_keys与array_values用法教程

来源:苹果APP网作者:新加坡程序员头衔:程序员
导读:本期聚焦于新加坡程序员创作的《php怎么获得数组的键和值?array_keys与array_values用法教程》,敬请观看详情。在php开发过程中,经常需要获取数组的键名或者键值,很多新手不知道该用什么函数实现。php内置的array_keys和array_values函数可以分别快速获取数组的所有键名和所有键值,这两个函数使用简单,无需复杂的遍历逻辑就能完成需求。本文将详细介绍这两个函数的语法规则、参数含义,同时搭配实际代码示例讲解不同场景下的使用方法,还会说明使用过程中的注意事项,帮助开发者快速掌握数组键值获取的相关技巧,提升开发效率。

在 PHP 编程中,数组是最常用的数据结构之一。关联数组能够以键值对的形式表达用户信息、配置项、表单数据等,因此在实际开发中经常需要单独取出数组中的所有键名,或者取出数组中的所有值。手动使用 foreach 循环逐个处理当然可行,但 PHP 已经提供了 array_keysarray_values 两个内置函数,可以直接完成提取操作,使代码更简洁,也更符合数组处理的常规写法。

array_keys 的核心用法:提取键名与按值筛选

array_keys 函数的主要作用是返回一个由原数组键名组成的新数组。它不会修改原数组,而是将键名按原数组中的出现顺序放入新的索引数组中,新数组的索引从 0 开始依次递增。对于字符串键名、数字键名以及混合键名,array_keys 都可以正确处理。理解这一点很重要,因为很多开发者会把键名和值混淆,而 array_keys 只关心键,不关心对应的值。

从参数设计上看,array_keys 至少需要一个数组参数。第二个参数用于指定要查找的值,只有当数组元素值与该参数匹配时,对应键名才会被返回。第三个参数用于控制是否启用严格比较。省略第二个参数时,函数返回全部键名;显式传入某个值时,函数则变成按值筛选键名。这种设计让同一个函数既能做全量提取,也能做条件筛选。

获取全部键名

<?php
// array_keys(array $array, mixed $search_value = null, bool $strict = false): array
$user = [
    'name' => '张三',
    'age' => 25,
    'city' => '北京'
];
$keys = array_keys($user);
print_r($keys);
// 输出:Array ( [0] => name [1] => age [2] => city )
?>

上面的示例中,原数组包含 nameagecity 三个键。调用 array_keys 后,返回结果是一个索引数组,其中 0 对应 name,1 对应 age,2 对应 city。原数组仍然保留键值对应关系,而新数组只保存键名。这样的结果非常适合用于打印字段名、生成表单字段列表或做后续集合运算。

按指定值筛选键名

<?php
$score = [
    '语文' => 90,
    '数学' => 85,
    '英语' => 90,
    '物理' => 88
];
$keys = array_keys($score, 90);
print_r($keys);
// 输出:Array ( [0] => 语文 [1] => 英语 )
?>

当需要找出哪些键对应的值等于某个目标值时,可以传入第二个参数。示例中语文和英语的分数都是 90,因此返回这两个科目名称。这个能力在处理成绩统计、状态筛选、标签反查等场景时很实用。需要注意的是,筛选结果只包含键名,不包含值本身,如果需要值,仍应回到原数组中读取。

严格比较与 null 值

<?php
$data = [
    'a' => 1,
    'b' => '1',
    'remark' => null,
    'name' => '李四'
];
$looseKeys = array_keys($data, 1);
$strictKeys = array_keys($data, 1, true);
$strictNullKeys = array_keys($data, null, true);
print_r($looseKeys);
// 输出:Array ( [0] => a [1] => b )
print_r($strictKeys);
// 输出:Array ( [0] => a )
print_r($strictNullKeys);
// 输出:Array ( [0] => remark )
?>

在非严格模式下,PHP 的类型转换会让 1 和 '1' 被视为相等,因此两个键都会被返回;启用严格模式后,只有类型和值都一致的键才会被匹配。对于 null 值,显式传入 null 时会匹配数组中的 null 值,而不是返回全部键名。如果业务上需要准确判断某个键的值是否为 null,建议结合严格模式使用,避免空字符串、0、false 等值在宽松比较中产生干扰。

array_values 的核心用法:抽取值并重建连续索引

array_values 函数的作用与 array_keys 相反,它返回原数组中的所有值,并重新建立一套从 0 开始的连续数字索引。原数组中的键名会被丢弃,值会按照原有顺序依次放入新数组。由于返回结果一定是索引数组,因此非常适合用于只需要值、不需要键名的场景,例如批量展示、批量更新、批量导出等。

在实际项目中,数组索引不连续是很常见的情况。比如删除了某个元素、过滤掉了部分数据、或者从外部系统接收到带有自定义键名的数组后,后续逻辑如果依赖 0、1、2 这样的连续索引,就容易出现问题。array_values 可以快速重建索引,使数组恢复为标准的索引数组,减少手动循环重置索引的麻烦。

基本抽取值

<?php
$user = [
    'name' => '张三',
    'age' => 25,
    'city' => '北京'
];
$values = array_values($user);
print_r($values);
// 输出:Array ( [0] => 张三 [1] => 25 [2] => 北京 )
?>

示例中,原数组是关联数组,包含姓名、年龄和城市三个键值对。调用 array_values 后,返回结果只保留值,并且索引重新从 0 开始。原数组中的 nameagecity 这些键名不再出现在结果中。如果只需要把数组内容作为纯数据列表处理,这种写法比手动循环更直接。

重置索引

<?php
$list = [0 => 'a', 1 => 'b', 2 => 'c'];
unset($list[1]);
print_r($list);
// 输出:Array ( [0] => a [2] => c )
$reindexed = array_values($list);
print_r($reindexed);
// 输出:Array ( [0] => a [1] => c )
?>

删除索引 1 的元素后,数组只剩下 0 和 2 两个索引,中间出现了空缺。经过 array_values 处理后,索引重新变为 0 和 1。这个操作不会改变值的顺序,也不会修改原数组,只是生成一个新的连续索引数组。对于需要传给前端、写入数据库或进行遍历下标访问的数据,重建索引往往是一个必要步骤。

两个函数的差异对比

函数返回值常见用途
array_keys键名组成的索引数组提取字段名、按值筛选键名
array_values值组成且索引从0开始的数组抽取值、重置连续索引

从对比表中可以看出,两个函数虽然都返回新数组,但返回内容完全不同。array_keys 返回的是键名,array_values 返回的是值;array_keys 支持按值筛选,array_values 则专注于值提取和索引重建。理解这种差异,可以在开发时快速选择合适的函数,避免写出不必要的循环代码。

组合使用与开发场景:字段校验和结果处理

在真实业务中,array_keysarray_values 往往不会孤立使用,而是和其他数组函数组合起来完成更复杂的逻辑。例如处理用户提交的表单时,后端通常需要校验提交字段是否都在允许范围内。此时可以先用 array_keys 取出所有提交字段,再与白名单字段做差集,从而找出多余字段。这种方式逻辑清晰,也便于维护。

<?php
$allowFields = ['username', 'password', 'email', 'phone'];
$postData = [
    'username' => 'test',
    'password' => '123456',
    'age' => 20
];
$postKeys = array_keys($postData);
$extraFields = array_diff($postKeys, $allowFields);
if (!empty($extraFields)) {
    echo '提交的字段中存在不允许的字段:' . implode(',', $extraFields);
} else {
    echo '字段校验通过';
}
?>

示例中,允许字段包括 usernamepasswordemailphone,而用户额外提交了 age 字段。array_keys 取出提交字段后,array_diff 计算出多出的字段,最终输出提示信息。如果提交字段全部合法,则输出校验通过。这个例子展示了从键名提取到集合比较的完整流程,也说明 array_keys 在安全校验类场景中具有重要价值。

使用注意事项

  • 两个函数都返回新数组,不会修改原数组,因此可以放心用于中间处理。
  • 如果输入是空数组,两个函数都会返回空数组,通常可以安全使用。
  • array_keys 的筛选结果依赖比较规则,涉及数字、字符串、null 等类型时,建议明确是否使用严格模式。
  • array_values 返回的索引一定是从 0 开始的连续数字索引,适合用于需要标准索引数组的后续处理。

总体来看,array_keysarray_values 是 PHP 数组处理中非常实用的两个函数。前者负责把键名独立出来,后者负责把值独立出来并重建索引。掌握它们的基本语法、筛选参数、严格比较方式以及组合用法,可以帮助开发者减少重复循环,提高代码可读性,也能在表单校验、数据清洗、结果输出等场景中写出更稳定的数组处理逻辑。

phparray_keysarray_values数组键值获取修改时间:2026-07-12 12:30:24

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。