0

我尝试了一种简单的方法来创建任何 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.='&nbsp&nbsp&nbsp<input type="checkbox" name=' . $fieldName.' value='.$valuesArray[$i].' id='.$valuesArray[$i];
                if(in_array($valuesArray[$i], $selectedOption)){
                        $returnString.=' checked="checked" ';
                }
                $returnString.=' />&nbsp&nbsp<label>'.$labelsArray[$i].'</label>';
            }
        }
        if ($fieldType === 'radio') {
            for ($i=0;$i<count($labelsArray);$i++) {
                $returnString.='&nbsp&nbsp<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'); ?> 

第一个参数是复选框字段或单选字段的名称,对于两种情况的所有选项,它总是相同的。第二个是标签数组,第三个是选定的选项,它将在加载表单时将这些选项显示为选中。第四种是将字符串作为“复选框”或“收音机”的字段类型。第五个是 values 数组,如果存在,它将包含标签的值,其顺序与标签的顺序相同。如果它不存在,标签数组将被当作值数组。我想知道这段代码是否有任何进一步的优化可能?

4

1 回答 1

1

我设法把它弄到了这里。

$selectedOption现在可以是字符串或数组,但对于单选框会自动剪切为 1 大小。

对于任何一种输入类型,您都有一些代码重复,因此它们已被组合并稍微适应。

我的问题是,你真的需要把 html 元素的创建抽象出来这么难吗?

另外,我应该注意的是,您订阅了多种编码标准(1 行 if 语句在使用大括号和不使用大括号之间弹跳等)。从技术上讲,您使用哪种并不重要,但请尝试使用其中一种。

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('&nbsp; &nbsp;<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 .= ' />&nbsp&nbsp<label>'.$labelsArray[$i].'</label>';
    }

    return $returnString;
}
于 2012-12-05T05:25:37.593 回答