我尝试过一种简单的方法来创建复选框以及任何php格式的单选按钮。唯一的问题是我正在使用Codeigniter MVC框架。
这是您可以在公共模型或任何帮助文件中插入的函数定义。
function createOptions($fieldName, $labelsArray=array(), $selectedOption, $fieldType,$valuesArray = array()) {
$returnString = '';
if(count($valuesArray)!=count($labelsArray))
$valuesArray=$lebelsArray;
if ($fieldType === 'checkbox') {
for ($i=0;$i<count($labelsArray);$i++) {
$returnString.='   <input type="checkbox" name=' . $fieldName.' value='.$valuesArray[$i].' id='.$valuesArray[$i];
if(in_array($valuesArray[$i], $selectedOption)){
$returnString.=' checked="checked" ';
}
$returnString.=' />  <label>'.$labelsArray[$i].'</label>';
}
}
if ($fieldType === 'radio') {
for ($i=0;$i<count($labelsArray);$i++) {
$returnString.='  <input type="radio" name=' . $fieldName.' value='.$valuesArray[$i].' id='.$valuesArray[$i];
if($valuesArray[$i]== $selectedOption)
$returnString.=' checked="checked" ';
$returnString.=' /><label>'.$labelsArray[$i].'</label>';
}
}
return $returnString;
}
并且,您必须在视图文件中将此函数称为
<?php
echo $this->common_model->createOptions('userHobbies[]', $hobbyOptions, $userHobbies, 'checkbox'); ?>
第一个参数是复选框字段或无线电字段的名称,对于两种情况,所有选项的名称始终相同。第二个是标签数组,第三个是选定的选项,它们会在加载表单时显示这些选项。第四种是字段类型,它将是一个字符串,作为“复选框”或“无线电”。第五个是值数组,如果存在,它将包含标签的值,其顺序与标签的顺序相同。如果不存在,则标签数组将被设为值数组。 我想知道这段代码中是否有进一步的优化?
答案 0 :(得分:1)
我设法把它带到了这里。
$selectedOption
现在可以是字符串或数组,但会自动将其缩小为1个大小。
对于任何一种输入类型,您都有一些代码重复,因此它们已经组合在一起并且工作有点适合。
我的问题是,你是否真的需要抽象出来创建html元素?
另外,我应该注意的是你订阅了多个编码标准(如果语句在使用大括号之间弹跳而不使用大括号等,则为1个。)在技术上并不重要,但要尽量坚持使用其中一种。
function createOptions($fieldName, $labelsArray=array(), $selectedOption, $fieldType, $valuesArray = array()) {
$returnString = '';
$selectedOption = (array) $selectedOption;
if(count($valuesArray) != count($labelsArray))
$valuesArray = $labelsArray;
if ($fieldType === 'radio')
$selectedOption = array_slice($selectedOption, 0, 1);
for ($i=0; $i < count($labelsArray); $i++)
{
$returnString .= sprintf(' <input type="%s" name="%s" value="%s" id="%s"',
$fieldType, $fieldName, $valuesArray[$i], $valuesArray[$i]);
if(in_array($valuesArray[$i], $selectedOption))
$returnString .= ' checked="checked" ';
$returnString .= ' />  <label>'.$labelsArray[$i].'</label>';
}
return $returnString;
}