如何检查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; }
函数逻辑说明
- 优先检查当前数组:先判断当前层级的数组有没有目标键,有就用
empty()验证,符合条件直接返回true; - 安全递归子数组:只对数组类型的元素进行递归,避免非数组元素导致的警告;
- 短路返回提高效率:只要在任意层级找到符合条件的键,立刻返回
true,不用遍历完所有元素; - 严格遵循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
相关产品推荐
相关产品推荐

