在php开发中,提取数组键名是常见操作,默认使用array_keys函数会返回数组所有键名,当我们需要过滤掉值为null、空字符串的键名时,就需要对默认方法进行改造。下面介绍几种常用的实现方案。

基础方案:循环遍历过滤
最直观的方式是遍历数组,判断每个值是否符合要求,将符合条件的键名存入新数组。这种方式逻辑清晰,容易理解,适合新手快速实现需求。
<?php
$originArray = [
'a' => 'hello',
'b' => null,
'c' => '',
'd' => 123,
'e' => 'test'
];
$resultKeys = [];
foreach ($originArray as $key => $value) {
// 过滤值为null或者空字符串的键
if ($value !== null && $value !== '') {
$resultKeys[] = $key;
}
}
print_r($resultKeys);
// 输出结果:Array ( [0] => a [1] => d [2] => e )
?>
内置函数组合方案
php提供了多个数组处理函数,可以通过组合这些函数实现过滤需求,代码更简洁,不需要手动写循环逻辑。
使用array_filter过滤数组
先使用array_filter过滤掉值为null、空字符串的元素,再对过滤后的数组使用array_keys提取键名。需要注意的是array_filter默认会过滤掉值为false的元素,所以要自定义过滤回调。
<?php
$originArray = [
'a' => 'hello',
'b' => null,
'c' => '',
'd' => 123,
'e' => 'test'
];
// 自定义过滤回调,保留值不为null且不为空字符串的元素
$filteredArray = array_filter($originArray, function($value) {
return $value !== null && $value !== '';
});
$resultKeys = array_keys($filteredArray);
print_r($resultKeys);
// 输出结果:Array ( [0] => a [1] => d [2] => e )
?>
使用array_keys配合array_diff
先提取所有键名,再找出值为null、空字符串对应的键名,用差集的方式得到需要的键名列表。
<?php
$originArray = [
'a' => 'hello',
'b' => null,
'c' => '',
'd' => 123,
'e' => 'test'
];
// 提取所有键名
$allKeys = array_keys($originArray);
// 找出值为null或者空字符串的键名
$emptyKeys = [];
foreach ($originArray as $key => $value) {
if ($value === null || $value === '') {
$emptyKeys[] = $key;
}
}
// 计算差集得到需要的键名
$resultKeys = array_diff($allKeys, $emptyKeys);
print_r($resultKeys);
// 输出结果:Array ( [0] => a [1] => d [2] => e )
?>
不同方案对比
三种方案各有适用场景,我们可以通过下表对比它们的特点:
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 循环遍历 | 逻辑直观,容易调试,可灵活添加过滤规则 | 代码量相对较多 | 过滤规则复杂,需要额外处理其他逻辑的场景 |
| array_filter组合 | 代码简洁,符合函数式编程风格 | 需要理解回调函数的使用,过滤规则修改需要改回调 | 过滤规则简单,追求代码简洁的场景 |
| array_diff组合 | 逻辑清晰,步骤拆分明确 | 需要两次遍历数组,性能略低 | 需要同时获取空值键名和正常键名的场景 |
注意事项
在实际使用中需要注意几个细节:
- 判断空字符串时要使用严格比较
$value !== '',避免把0、false等合法值误过滤。 - 如果数组中还有0、false、空数组等需要保留的值,过滤条件要对应调整,不要直接过滤掉所有空值。
- 当数组维度较高时,上述方法仅适用于一维数组,多维数组需要先做扁平化处理。
注意:array_keys函数本身没有内置过滤空值的参数,所有过滤逻辑都需要额外添加,开发者可以根据项目需求选择最合适的实现方式。
以上就是php中array_keys忽略空值提取键名、过滤null和空字符串的几种常用方法,开发者可以根据实际场景灵活选择。
phparray_keys过滤空值键名提取空字符串处理修改时间:2026-06-30 18:18:20