PHP判断前端POST数据中Rule数组是否存在NAME索引
解决PHP中判断数组是否包含指定索引的问题
嘿,我看你代码里的核心问题是把array_key_exists的参数顺序搞反啦!这个函数的第一个参数应该是要检查的键名,第二个才是目标数组,你现在写的逻辑完全颠倒了,而且直接取$ruledata['NAME']还会因为键不存在抛出警告,这就导致判断完全失效。
下面给你捋清楚正确的实现方式:
第一步:确保正确解析前端POST的JSON数据
首先得把前端传的JSON字符串转成PHP数组,别忘了做解码错误检查:
// 获取并解码POST的JSON数据 $postData = json_decode(file_get_contents('php://input'), true); if (json_last_error() !== JSON_ERROR_NONE) { $this->logger->error('收到无效的JSON数据'); return; }
第二步:正确遍历并检查NAME索引
接下来遍历每个seg下的rule数组,用正确的array_key_exists语法判断是否存在NAME键:
$is_new = false; // 遍历seg数组 foreach ($postData['seg'] as $segment) { // 遍历当前seg下的rule列表 foreach ($segment['rule'] as $ruledata) { // 正确用法:第一个参数是键名"NAME",第二个是要检查的数组 if (array_key_exists('NAME', $ruledata)) { $is_new = true; $this->logger->info('检测到包含NAME索引的规则数据:' . print_r($ruledata, true)); // 如果只要找到一个就停止遍历,可以加break跳出循环 // break 2; // 跳出两层循环,提前结束遍历 } } }
补充:关于array_key_exists和isset()的区别
- 用
array_key_exists是最适合你场景的,因为它会严格检查键是否存在,哪怕键对应的值是null(比如你数据里的"NAME":"null")也会返回true。 - 如果用
isset()的话,当键存在但值为null时会返回false,不符合你的需求,所以这里别用它。
你原代码的错误点复盘
原代码里的错误写法:
// ❌ 错误:参数顺序颠倒,且$ruledata['NAME']会在键不存在时抛警告 if (array_key_exists($ruledata['NAME'], $ruledata)) { ... }
改成正确的写法就没问题了:
// ✅ 正确:检查数组$ruledata中是否存在键"NAME" if (array_key_exists('NAME', $ruledata)) { ... }
内容的提问来源于stack exchange,提问作者Shiromi
相关产品推荐
相关产品推荐

