array_keys返回数组所有键名,array_values返回所有值并重置为数字索引;二者均不修改原数组,支持条件筛选与去重组合,需注意类型比较和空值陷阱。

array_keys 和 array_values 是 PHP 中两个基础但高频使用的数组函数,用对了能大幅简化键值处理逻辑。它们不改变原数组,只返回新数组,适合链式操作和条件过滤。
快速提取键名或键值,避免手动遍历
当需要单独处理键或值时,直接调用比 foreach 更简洁高效:
- array_keys($arr) 返回所有键组成的索引数组(保持原始顺序);
- array_values($arr) 返回所有值组成的索引数组(重置为数字键,从 0 开始)。
例如:
$data = ['name' => 'Alice', 'age' => 30, 'city' => 'Beijing'];
array_keys($data) → ['name', 'age', 'city']
array_values($data) → ['Alice', 30, 'Beijing']
配合条件筛选:array_keys 支持搜索值定位键
array_keys 可传入第二个参数进行值匹配,返回所有匹配项的键名(支持严格比较):
- array_keys($arr, 'pending', true) 找出所有值严格等于 'pending' 的键;
- 若值是数组或对象,需注意类型一致性,否则可能漏匹配;
- 返回结果仍是索引数组,可直接用于 unset 或 array_intersect_key 等操作。
示例:
$logs = ['a' => 'error', 'b' => 'info', 'c' => 'error'];
array_keys($logs, 'error') → ['a', 'c']
重建索引 + 去重组合技:array_values 配合 array_unique
要获取去重后的值并保证数字索引连续,常见写法是:
立即学习“PHP免费学习笔记(深入)”;
- array_values(array_unique($arr)) —— 先去重再重排键;
- 单独用 array_unique 会保留原始键名,后续若依赖数字下标(如 for 循环、JSON 编码),必须加 array_values;
- 该组合在处理表单多选、标签列表、ID 集合等场景很实用。
注意键类型与空值陷阱
这两个函数对键/值类型不做转换,需留意边界情况:
- 关联数组中含数字字符串键(如 '0'、'1')时,array_keys 仍原样返回,不会转为整型;
- 值为 null、false 或空字符串时,array_keys($arr, false) 可能意外匹配多个项(因 PHP 类型宽松比较);建议启用第三个参数 true 启用严格模式;
- 空数组输入时,两者均返回空数组,不会报错,可安全使用。











