验证员工是否在列表中时判断始终为false的问题排查
问题描述
我尝试验证某医生是否在员工列表中,但判断语句始终返回false。$response变量存储了从REST API的GET请求获取的JSON数据,我已确认输入的信息确实存在于该JSON列表中。遍历列表时,匹配到对应JSON数据时应该判断为TRUE,但当前代码逻辑存在问题,寻求帮助。
HTML代码
<form method="post" action="personal-process.php"> <label for ="emp_id">Verify Employee </label> <input type="text" name="emp_id" id="emp_id"> <button type="submit">Enter</button> </form>
PHP代码
if(isset($_POST['emp_id'])){ function debug($o){ echo '<pre>'; print_r($o); echo '</pre>'; } debug($_POST); foreach($response['data'] AS $key => $value){ echo $value ['name']; echo '<br>'; } echo $_POST['emp_id']; if($value['name'] == $_POST['emp_id']){ echo"Success"; } elseif ($value['name'] != $_POST['emp_id']) { echo "Not In the list"; } }
问题分析与修复
你的代码核心问题是判断语句放在了foreach循环外面,导致$value只保留了循环最后一次迭代的元素值,而非遍历过程中匹配到的目标元素。
正确逻辑是在循环内部逐个检查元素,找到匹配项后标记状态并跳出循环,循环结束后再根据标记输出结果。同时建议处理输入和数据的首尾空格,避免空格导致的匹配失败。
修复后的PHP代码:
if(isset($_POST['emp_id'])){ function debug($o){ echo '<pre>'; print_r($o); echo '</pre>'; } debug($_POST); $found = false; // 初始化匹配状态标记 $input = trim($_POST['emp_id']); // 去除输入首尾空格 foreach($response['data'] AS $key => $value){ echo $value['name'] . '<br>'; // 在循环内部检查当前元素是否匹配 if(trim($value['name']) == $input){ $found = true; break; // 找到匹配项后直接跳出循环,无需继续遍历 } } echo $input; if($found){ echo "Success"; } else { echo "Not In the list"; } }
内容的提问来源于stack exchange,提问作者xtremesnus
相关产品推荐
相关产品推荐

