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

PHP数组遍历问题:用foreach与array_keys实现预期表单输出

解决PHP数组遍历生成翻译输入框的问题

我来帮你搞定这个问题~你的代码核心问题是嵌套foreach的逻辑没处理对,错误地遍历了$texts[$text]下的所有元素(包括id这个非数组值),而且没有正确关联文本ID和翻译内容。下面是修正后的完整方案:

问题分析

你的原代码中,第二个foreach($texts[$text] as $textData)会遍历当前文本项的id和translations两个元素:

  • 当$textData是id的数值(比如1)时,array_keys($textData)会抛出错误,因为数值不是数组
  • 你没有正确提取id来构建input的ID,也没有直接获取对应语言的翻译值

修正后的代码

foreach(array_keys($texts) as $textKey) {
    // 输出h1标题,用htmlspecialchars防止XSS
    echo "<h1>". htmlspecialchars($textKey) ."</h1>";
    
    // 直接获取当前文本项的ID和翻译数组
    $itemId = $texts[$textKey]['id'];
    $translations = $texts[$textKey]['translations'];
    
    // 遍历翻译数组的键值对(语言代码 => 翻译内容)
    foreach($translations as $languageCode => $translationValue) {
        // 构建input的ID:语言代码_文本ID
        $inputId = "{$languageCode}_{$itemId}";
        // 输出输入框,同样用htmlspecialchars处理变量
        echo htmlspecialchars($languageCode) .": <input type=\"text\" id=\"". htmlspecialchars($inputId) ."\" value=\"". htmlspecialchars($translationValue) ."\" /><br />";
    }
}

代码说明

  1. 直接定位核心数据:跳过不必要的嵌套,直接从$texts[$textKey]中取出id和translations数组,避免遍历无关的元素
  2. 遍历翻译键值对:直接遍历$translations的键(语言代码)和值(翻译内容),一步到位获取需要的信息
  3. 安全处理输出:使用htmlspecialchars()转义所有变量输出,防止XSS攻击,这是PHP输出HTML的最佳实践
  4. 正确构建ID:用语言代码_文本ID的格式生成input的id,和你预期的de_1、en_2完全匹配

运行这段代码后,就能得到你想要的输出效果啦。

内容的提问来源于stack exchange,提问作者rwur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:53:37