多选打印语言时仅最后一个语言变量生效问题求助
问题原因与修复方案
问题根源
你的循环逻辑存在覆盖漏洞:每次循环处理一个选中的语言时,所有4个语言变量都会被重新赋值。比如选中en和de时:
- 第一次循环处理
en,会把$on_screen_language_for_print_en设为yes,但同时会把es、fr、de的变量强制设为空; - 第二次循环处理
de,会把$on_screen_language_for_print_de设为yes,但又会把en、es、fr的变量清空覆盖;
最终只有最后一个循环的语言变量保留yes,之前选中的语言变量都会被置空。
另外,代码里!empty($seleccion=='en')的写法完全冗余,$seleccion == 'en'本身就是布尔判断,不需要套empty。
修复后的代码
先初始化所有语言变量为空,然后在循环里只对当前选中的语言变量赋值yes,跳过其他变量的清空操作:
// 先初始化所有语言变量为空 $on_screen_language_for_print_en = ""; $on_screen_language_for_print_es = ""; $on_screen_language_for_print_fr = ""; $on_screen_language_for_print_de = ""; // 循环处理选中的语言,只给对应变量设为yes foreach($_POST['language_for_print'] as $seleccion) { echo "<p>".$seleccion."</p>"; if ($seleccion == 'en') { $on_screen_language_for_print_en = "yes"; } elseif ($seleccion == "es") { $on_screen_language_for_print_es = "yes"; } elseif ($seleccion == "fr") { $on_screen_language_for_print_fr = "yes"; } elseif ($seleccion == "de") { $on_screen_language_for_print_de = "yes"; } }
更简洁的写法(推荐)
如果变量命名有规律,用数组管理会更灵活,避免重复的if判断:
// 定义所有支持的语言 $supported_langs = ['en', 'es', 'fr', 'de']; // 初始化数组,所有语言默认空值 $on_screen_language_for_print = array_fill_keys($supported_langs, ""); foreach($_POST['language_for_print'] as $seleccion) { echo "<p>".$seleccion."</p>"; // 只给选中的语言设为yes if (in_array($seleccion, $supported_langs)) { $on_screen_language_for_print[$seleccion] = "yes"; } } // 调用时使用 $on_screen_language_for_print['en'] 这样的方式
内容的提问来源于stack exchange,提问作者Manfred
相关产品推荐
相关产品推荐

