You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检查PHP多维数组中指定键的值是否为空?

修复多维数组指定键值为空检查的递归函数

我来帮你搞定这个问题!你的递归思路方向是对的,但原代码有几个逻辑小漏洞,导致它没法正常工作。咱们一步步修正:

原函数的问题分析

  • 没先检查当前数组本身是否包含目标键,直接遍历元素,导致顶层数组的键被忽略;
  • 遍历到非数组元素(比如字符串、数字)时,尝试访问$item[$key]会触发PHP警告(非法字符串偏移);
  • 递归的判断逻辑不够严谨,可能提前返回错误结果。

修复后的函数

function bg_empty_value_check($array, $key) {
    // 优先检查当前数组本身是否存在目标键
    if (array_key_exists($key, $array)) {
        if (empty($array[$key])) {
            return true;
        }
    }

    // 遍历数组元素,仅对数组类型的元素递归检查
    foreach ($array as $item) {
        if (is_array($item)) {
            // 递归调用,子数组找到符合条件的键就直接返回true
            if (bg_empty_value_check($item, $key)) {
                return true;
            }
        }
        // 非数组元素不可能包含目标键,直接跳过
    }

    // 所有层级都没找到符合条件的键,返回false
    return false;
}

函数逻辑说明

  1. 优先检查当前数组:先判断当前层级的数组有没有目标键,有就用empty()验证,符合条件直接返回true;
  2. 安全递归子数组:只对数组类型的元素进行递归,避免非数组元素导致的警告;
  3. 短路返回提高效率:只要在任意层级找到符合条件的键,立刻返回true,不用遍历完所有元素;
  4. 严格遵循empty()规则:完全按照PHP的empty()判定标准(0、空字符串、null、false、空数组等都算空)。

测试你的示例

用你给出的多维数组测试,结果完全符合预期:

$my_multi_array = array(
    0 => array(
        "country" => "",
        "price" => 4,
        "discount-price" => 0,
    ),
);

var_dump(bg_empty_value_check($my_multi_array, "country"));        // bool(true)
var_dump(bg_empty_value_check($my_multi_array, "discount-price")); // bool(true)
var_dump(bg_empty_value_check($my_multi_array, "price"));          // bool(false)
var_dump(bg_empty_value_check($my_multi_array, "nonexistent"));    // bool(false)

内容的提问来源于stack exchange,提问作者TinyTiger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:53:41