PHP多语言多维数组切换问题:通过$_GET参数切换英法语言
语言切换优化:多维数组处理与GET参数实现
我有一个包含英法双语的多维数组,想通过按钮触发$_GET['lang-fr']和$_GET['lang-en']参数实现语言切换。现在用三层foreach循环处理数组,但不确定这是不是最佳实践,以下是我的数组和代码实现:
$experiences = [ 'lang-fr' => [ [ 'name' => 'poissonerie', 'address' => 'impasse de la tête coupee', 'date' => '1350', 'description' => 'bonne experience, patron delicieux avec ses employes', ], ], 'lang-en' => [ [ 'name' => 'blablz', 'address' => 'cut head', 'date' => '1350', 'description' => 'boss so delicious', ], ], ]; foreach ($experiences as $lang => $experience) { if (isset($_GET['lang-fr'])) { foreach ($experience as $arrayIn => $other) { echo ' <div class="time">'; echo ' <span class="rounded"></span>'; echo ' <span class="line"></span>'; echo '</div>'; echo '<div class="data-experiences">'; foreach ($other as $key => $value) { switch ($key) { case 'address' === $key: echo '<i>'.$lang[$value].'</i>'.'</br>'; break; case 'date' === $key: echo '<time>'.$lang[$value].'</time>'.'</br>'; break; case 'description' === $key: echo '<mark>'.$lang[$value].'</mark>'.'</br>'; break; default:'name' === $key; echo '<h4>'.$lang[$value].'<h4>'; break; } } echo '</br></div>'; } } }
现有代码的问题
- 三层循环冗余:不需要遍历所有语言,直接根据GET参数定位目标语言数组即可
- switch语句语法错误:
case 'address' === $key是逻辑错误,应写成case 'address';$lang[$value]无效,$lang是字符串,不能当作数组使用,直接输出$value即可 - 切换逻辑不完整:仅处理了
lang-fr的情况,未覆盖lang-en的切换需求 - 安全与可读性不足:HTML输出重复且未做XSS防护,代码冗余难维护
优化后的实现方案
// 确定当前显示语言,设置默认值避免无参数时出错 $currentLang = 'lang-fr'; if (isset($_GET['lang-en'])) { $currentLang = 'lang-en'; } elseif (isset($_GET['lang-fr'])) { $currentLang = 'lang-fr'; } // 直接获取对应语言的经验列表,空数组兜底防止报错 $currentExperiences = $experiences[$currentLang] ?? []; // 仅遍历当前语言的经验项,一层循环足够 foreach ($currentExperiences as $item) { // 输出时间线容器 echo '<div class="time"> <span class="rounded"></span> <span class="line"></span> </div>'; // 输出经验内容容器 echo '<div class="data-experiences">'; // 按固定顺序输出内容,比遍历所有键更直观 echo '<h4>' . htmlspecialchars($item['name']) . '</h4>'; echo '<i>' . htmlspecialchars($item['address']) . '</i><br>'; echo '<time>' . htmlspecialchars($item['date']) . '</time><br>'; echo '<mark>' . htmlspecialchars($item['description']) . '</mark><br>'; echo '</div><br>'; }
优化说明
- 精简循环层级:直接通过语言参数定位目标数组,仅遍历需要显示的内容,提升效率与可读性
- 修复语法问题:修正switch语句写法,使用正确变量输出内容
- 完善切换逻辑:同时支持两种语言切换,设置默认语言保证无参数时正常显示
- 增强安全性:用
htmlspecialchars()转义输出内容,防止XSS攻击 - 简化代码结构:合并重复echo语句,让HTML输出更简洁易维护
内容的提问来源于stack exchange,提问作者user17169191
相关产品推荐
相关产品推荐

