如何使用PHP判断嵌套数组内是否存在有效值?
PHP判断嵌套数组是否存在有效值
你的问题核心是主数组包含非空的子数组,但需要判断子数组内的指定字段(retailer_link_or_sku和affiliate_url)是否存在非空有效值。之前用empty()、array_filter()的方法失效,是因为它们只检查主数组或子数组是否存在,而非子数组内的具体值。
方法一:针对性检查指定字段(高效)
既然你只关心特定的两个键,可以直接遍历子数组,检查这两个键是否有非空值:
function hasValidRetailerValues($array) { $targetKeys = ['retailer_link_or_sku', 'affiliate_url']; foreach ($array as $retailer) { if (!is_array($retailer)) continue; foreach ($targetKeys as $key) { // 检查键存在且值非空白(trim处理掉纯空格的情况) if (isset($retailer[$key]) && trim($retailer[$key]) !== '') { return true; } } } return false; } // 使用示例 $sampleArray1 = [ 'amazon_uk' => [ 'retailer_link_or_sku' => '', 'affiliate_url' => '' ], 'awd_it' => [ 'retailer_link_or_sku' => '', 'affiliate_url' => '' ] ]; var_dump(hasValidRetailerValues($sampleArray1)); // bool(false) $sampleArray2 = [ 'amazon_uk' => [ 'retailer_link_or_sku' => 'value123', 'affiliate_url' => '' ], 'ccl_online' => [ 'retailer_link_or_sku' => 'value123', 'affiliate_url' => '' ] ]; var_dump(hasValidRetailerValues($sampleArray2)); // bool(true)
方法二:递归检查所有嵌套元素(通用)
如果未来可能新增其他字段或更深的嵌套层级,用递归遍历所有元素的方式更通用:
function hasAnyValidValue($array) { foreach ($array as $value) { if (is_array($value)) { // 递归检查子数组 if (hasAnyValidValue($value)) { return true; } } else { // 判断值是否为非空白有效内容 if (trim($value) !== '') { return true; } } } return false; } // 使用示例同方法一,结果一致
为什么旧方法失效?
empty($array):主数组包含子数组,所以返回false(非空),不符合你的判定需求。!array_filter($array):array_filter默认只过滤null、false、0、''等值,但子数组属于非空类型,不会被过滤,所以array_filter($array)仍返回包含子数组的数组,!后结果为false。sizeof($array):仅返回主数组的元素个数,显然大于0,无法判断子数组内的值。
内容的提问来源于stack exchange,提问作者Lewis Hardisty
相关产品推荐
相关产品推荐

