You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:35:27