如何在执行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
相关产品推荐
相关产品推荐

