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

如何在执行if语句前检查数组中$meta_key是否存在值

解决思路:检查递归数组中键的存在性及对应值的有效性

看起来你已经搞定了递归检查$meta_key是否在数组里的逻辑,但现在想在执行数据库操作前,额外确认这个键对应的值是否有效/存在对吧?我来给你一步步调整代码:

第一步:写一个递归查找键值的辅助函数

原有的in_array_recursive应该是用来检查值是否在数组中,但你需要的是定位到$meta_key这个键,并拿到它对应的值。所以先新增一个递归函数来实现这个功能:

/**
 * 递归遍历数组,查找指定键对应的值
 * @param string $targetKey 要查找的目标键
 * @param array $sourceArray 待遍历的源数组
 * @return mixed|null 找到则返回对应值,未找到返回null
 */
private function get_recursive_key_value($targetKey, $sourceArray) {
    foreach ($sourceArray as $key => $value) {
        // 找到目标键,直接返回对应值
        if ($key === $targetKey) {
            return $value;
        }
        // 如果当前值是数组,继续递归查找
        if (is_array($value)) {
            $foundValue = $this->get_recursive_key_value($targetKey, $value);
            if ($foundValue !== null) {
                return $foundValue;
            }
        }
    }
    // 遍历完没找到,返回null
    return null;
}

第二步:修改原代码的判断逻辑

现在可以用这个函数先拿到值,再同时判断键存在和值有效两个条件:

// 先应用过滤器处理键数组
$this->keys = apply_filters('sc_meta_keys', $this->keys);

// 递归查找目标键对应的值
$metaValue = $this->get_recursive_key_value($meta_key, $this->keys);

// 核心判断:键存在(值不为null)且值有效(根据你的需求调整条件)
if ($metaValue !== null && !empty($metaValue)) {
    if ($action == "add") {
        // 这里执行将数组信息写入数据库的逻辑
    }
} else {
    // 键不存在,或者值无效时执行的操作
}

关于“值是否存在”的判断条件说明

你可以根据实际需求调整判断逻辑:

  • 如果只需要键存在(不管值是什么,包括null/0/false):只用$metaValue !== null即可
  • 如果需要值不为空(排除空字符串、空数组、0、false、null):用!empty($metaValue)
  • 如果需要值是特定类型(比如必须是数组/字符串):可以加上类型判断,比如is_array($metaValue)

这样就能确保在执行数据库写入操作前,不仅确认了$meta_key存在,还保证它有你需要的有效值啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:07:14