如何通过子分类ID在文本输入框获取名称?无需foreach调用Markup
解决方案
一、将Select转为Text Input并填充子分类名称
步骤1:预处理子分类数组
先把原有的$sub_category数组转换成以子分类ID为键、名称为值的关联数组,跳过循环直接通过ID快速获取对应名称:
// 替换成你实际的字段名:'name'是子分类名称字段,'id'是子分类ID字段 $sub_category_map = array_column($sub_category, 'name', 'id');
步骤2:渲染文本输入框
从$sub_category_data中取出选中的子分类ID,通过预处理好的关联数组获取名称填充到文本框(可加readonly禁止手动修改,按需调整):
<input type="text" value="<?php // 替换成你实际的ID字段名,比如$sub_category_data['sub_cat_id'] $selected_id = $sub_category_data['id'] ?? ''; echo $selected_id ? htmlspecialchars($sub_category_map[$selected_id], ENT_QUOTES) : ''; ?>" <?php echo $selected_id ? 'readonly' : ''; ?> >
注:
htmlspecialchars用于防范XSS注入,ENT_QUOTES确保单双引号都被转义,提升安全性。
二、Markup文本框+隐藏域直接通过子分类ID填充
步骤1:预处理Markup数据(按需操作)
如果你的Markup数据(对应子分类的markup值)不是以ID为键的关联数组,先做同样的转换:
// 假设$markup_list是包含子分类ID和对应markup值的数组,替换实际字段名 $markup_map = array_column($markup_list, 'markup_value', 'sub_cat_id');
步骤2:渲染文本框和隐藏域
用选中的子分类ID从$markup_map中取值,直接填充到两个控件:
<!-- Markup文本输入框 --> <input type="text" value="<?php $selected_id = $sub_category_data['id'] ?? ''; echo $selected_id ? htmlspecialchars($markup_map[$selected_id], ENT_QUOTES) : ''; ?>" > <!-- 对应的隐藏域 --> <input type="hidden" name="markup_value" value="<?php $selected_id = $sub_category_data['id'] ?? ''; echo $selected_id ? $markup_map[$selected_id] : ''; ?>" >
注:隐藏域的值若无需前端展示,可不用
htmlspecialchars,但后端存储时仍需做安全校验。
内容的提问来源于stack exchange,提问作者wloleo
相关产品推荐
相关产品推荐

