是否有更好的方法来创建PHP格式的复选框和单选按钮?

时间:2012-12-05 04:59:52

标签: php forms codeigniter checkbox radio-button

我尝试过一种简单的方法来创建复选框以及任何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'); ?> 

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

1 个答案:

答案 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('&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;
}