PHP如何根据当前页面URL或站点语言版本动态展示不同图片资源
问题解答
多if语句执行逻辑
你写的多个独立if语句不会在匹配第一个条件后终止,每个条件都会独立校验,只要符合规则就会执行对应代码。如果你希望匹配到第一个符合项就停止后续判断,可以改用if...elseif...else结构,能减少不必要的判断开销。
代码优化方案
最简洁且便于维护的写法是用映射数组存储语言标识和对应内容的匹配关系,直接通过键值对读取即可,不需要编写大量重复的判断语句:
<?php // 定义语言映射关系,后续新增语言仅需在此处添加条目即可 $language_map = [ 'en_GB' => 'English', 'pl_PL' => 'Polish', 'es_ES' => 'Spanish', 'nl_NL' => 'Dutch', 'tl' => 'Tagalog', 'pl_PL2' => 'Polish 2', 'pt_PT' => 'Portuguese' ]; $current_language = get_locale(); // 存在对应映射则输出内容,无匹配时输出默认内容 echo $language_map[$current_language] ?? '默认展示内容'; ?>
如果使用的PHP版本低于7.0,不支持空合并运算符,可以替换为兼容写法:
echo isset($language_map[$current_language]) ? $language_map[$current_language] : '默认展示内容';
这种方案同样适用于你最开始提到的根据URL匹配不同图片的需求:
<?php // 定义URL和图片的映射规则 $url_img_map = [ 'http://webpage.com/test/en/' => '图片1的资源地址', 'http://webpage.com/test/fr/' => '图片2的资源地址', 'http://webpage.com/test/nl/' => '图片3的资源地址' ]; // 拼接获取当前页面完整URL $current_url = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; // 匹配成功则输出对应图片 if (isset($url_img_map[$current_url])) { echo '<img src="' . esc_url($url_img_map[$current_url]) . '" alt="">'; } ?>
该写法的优势十分明显:
- 后续新增匹配规则仅需修改映射数组,无需新增判断语句,代码结构更整洁
- 无需重复做相等判断,读取执行效率更高
- 所有匹配规则集中在一处管理,维护成本更低,不容易出现书写错误
内容的提问来源于stack exchange,提问作者PaulTDS
相关产品推荐
相关产品推荐

