PHP使用in_array比对当前URL与数据库URL数组仅首个匹配问题
问题原因
- 分隔后的URL存在多余空白字符:从数据库取出的逗号分隔字符串如果在逗号前后包含空格、换行等不可见空白,explode后除了首个元素外其余元素都会携带多余空白,导致和实际URL匹配失败。
- URL末尾斜杠不一致:WordPress的
get_permalink()默认会给URL添加末尾斜杠,如果你数据库存储的URL没有携带末尾斜杠,也会出现匹配不上的问题。
解决方案
修改代码统一处理数组元素格式、对齐URL的末尾斜杠规则即可,修改后参考代码如下:
$url = get_permalink(); function check_links($url){ $db_links = get_option('db_links'); // 拆分后清理每个元素的空白,同时统一去掉末尾斜杠 $exclude = array_map(function($item){ return rtrim(trim($item), '/'); }, explode(',', $db_links)); // 处理当前URL的末尾斜杠,和数组规则保持一致 $current_url = rtrim($url, '/'); if(in_array($current_url, $exclude)){ echo "display:none"; } }
如果修改后仍存在匹配问题,可以临时添加调试代码确认两者内容是否完全一致:
// 调试用,上线前删除即可 var_dump($current_url, $exclude);
内容的提问来源于stack exchange,提问作者dcron
相关产品推荐
相关产品推荐

