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 />"; } }
代码说明
- 直接定位核心数据:跳过不必要的嵌套,直接从
$texts[$textKey]中取出id和translations数组,避免遍历无关的元素 - 遍历翻译键值对:直接遍历
$translations的键(语言代码)和值(翻译内容),一步到位获取需要的信息 - 安全处理输出:使用
htmlspecialchars()转义所有变量输出,防止XSS攻击,这是PHP输出HTML的最佳实践 - 正确构建ID:用
语言代码_文本ID的格式生成input的id,和你预期的de_1、en_2完全匹配
运行这段代码后,就能得到你想要的输出效果啦。
内容的提问来源于stack exchange,提问作者rwur
相关产品推荐
相关产品推荐

