php中array_keys忽略空值提取_php过滤掉null或空字符串的键名列表方法

使用array_filter()结合array_keys()可提取非空值的键名:默认过滤假值(如null、""、0等),或自定义条件排除特定值(如仅排除null和""),多维数组可通过回调函数针对字段判断,最终获取符合条件元素的键名列表。

在 PHP 中,若想从数组中提取非空(即排除 null、空字符串 ""0false 等“假值”)的键名,不能直接使用 array_keys() 完成过滤,因为它默认返回所有键。需要结合 array_filter() 先清理值,再用 array_keys() 提取键名。

只保留值为非空元素的键名

使用 array_filter() 过滤掉值为空的元素(如 null、""、false、0、[] 等),然后通过 array_keys() 获取剩余元素的键:

$array = [
    'name' => 'Alice',
    'age'  => null,
    'city' => '',
    'job'  => 'Engineer',
    'score'=> 0,
    'active'=> true
];

$keys = array_keys(array_filter($array));

// 结果:['name', 'job', 'active']

注意:array_filter() 在不传回调函数时,会自动过滤“假值”(falsy values),包括:
- null
- ""(空字符串)
- 0
- false
- [](空数组)

仅排除 null 和空字符串,保留 0 和 false

如果你希望保留值为 0false 的项,只排除 null"",就需要自定义过滤条件:

$keys = array_keys(array_filter($array, function($value) {
    return $value !== null && $value !== '';
}));

这样即使值是 0false,只要不是 null 或空字符串,其键名也会被保留。

处理多维数组或特定字段场景

如果数组是多维的,比如用户列表,你想找出哪些用户的某个字段(如 email)不为空,也可以类似操作:

$users = [
    ['name' => 'Alice', 'email' => 'alice@example.com'],
    ['name' => 'Bob',   'email' => null],
    ['name' => 'Cindy', 'email' => '']
];

$validEmailKeys = array_keys(array_filter($users, function($user) { return !empty($user['email']); })); // 结果:[0] —— 只有 Alice 的 email 有效

这里使用 !empty() 判断字段是否存在且非空。

基本上就这些方法。根据你对“空值”的定义,选择合适的过滤方式即可。重点是先用 array_filter() 控制保留哪些元素,再用 array_keys() 拿到键名列表。