PHP使用array_search验证GET参数白名单异常排查
问题分析与解决方案
问题原因
你遇到的核心问题是array_search的返回值在布尔判断中被误解析:
$fieldWhitelist里'recipeName'的索引是0,array_search找到匹配项后会返回这个索引值- 在PHP的
if条件判断中,数值0会被自动转换为布尔值false,导致明明存在的字段被判定为不存在
修复方案
方案1:改用in_array直接判断存在性
in_array专门用于检查元素是否在数组中,直接返回布尔值,逻辑更直观:
foreach ($get as $field => $groupedValues) { if (in_array($field, $fieldWhitelist, false)) { echo "$field true"; } else { echo "$field false"; } }
方案2:对array_search结果做严格比较
如果要保留array_search的使用,需要用!== false做严格判断,避免0被误判:
foreach ($get as $field => $groupedValues) { if (array_search($field, $fieldWhitelist, false) !== false) { echo "$field true"; } else { echo "$field false"; } }
两种方案都能让所有白名单字段正确返回true,其中in_array的可读性更高,更适合单纯的存在性校验场景。
内容的提问来源于stack exchange,提问作者grunt
相关产品推荐
相关产品推荐

