如何在PHP HEREDOC字符串中调用函数生成枚举下拉选单?
解决PHP HEREDOC中调用函数生成下拉选项的问题
你的问题核心有两点:
- HEREDOC字符串中无法直接嵌入
<?php ?>标签执行代码 - 原函数是直接输出内容(
print),而非返回字符串,没法直接插入到HEREDOC中
步骤1:修改函数为返回字符串
把原函数里的print改成字符串拼接逻辑,最后返回生成的所有option代码:
function show_enum_in_dropdownbox() { $options = ''; $query = query("SHOW COLUMNS FROM members_personal_details WHERE Field = 'enum_region'"); while ($row = mysqli_fetch_row($query)) { foreach(explode("','",substr($row[1],6,-2)) as $option) { $options .= "<option>$option</option>"; } } return $options; }
步骤2:在HEREDOC中插入函数结果
有两种可行方式:
方式一:先赋值变量再插值
先把函数返回的结果存到变量里,再在HEREDOC中用{$变量名}插入:
$enumOptions = show_enum_in_dropdownbox(); $myenums = <<<DELIMETER <select name="region" id="" class="form-control" style="min-width: 100%; max-height: 200px;" required> <option value="">PLEASE SELECT REGION</option> {$enumOptions} </select> DELIMETER; echo $myenums;
方式二:PHP 5.3+直接在HEREDOC中调用函数(推荐)
HEREDOC支持直接在{}中调用函数,无需提前赋值变量:
$myenums = <<<DELIMETER <select name="region" id="" class="form-control" style="min-width: 100%; max-height: 200px;" required> <option value="">PLEASE SELECT REGION</option> {show_enum_in_dropdownbox()} </select> DELIMETER; echo $myenums;
额外提示
- 确保你的
query()函数是正确封装的mysqli查询(需返回mysqli_result对象) - 如果需要给option设置对应的value属性,可以修改函数拼接代码为:
$options .= "<option value=\"$option\">$option</option>";
内容的提问来源于stack exchange,提问作者Chris Dormani
相关产品推荐
相关产品推荐

