Php 函数作为函数的参数

Php 函数作为函数的参数,php,function,parameters,Php,Function,Parameters,我有两个功能: 复选框创建者: function AddCheckBoxes($title,$box_values,$box_titles){ echo '<div class="form-group"><label>' . $title . '</label>'; $boxes_values_titles = new MultipleIterator(); $boxes_values_titles->attachIterator

我有两个功能:

复选框创建者:

function AddCheckBoxes($title,$box_values,$box_titles){
    echo '<div class="form-group"><label>' . $title . '</label>';
    $boxes_values_titles = new MultipleIterator();
    $boxes_values_titles->attachIterator(new ArrayIterator($box_values));
    $boxes_values_titles->attachIterator(new ArrayIterator($box_titles));
    foreach ( $boxes_values_titles as $value ) {
        list($box_values, $box_titles) = $value;
        echo '<div class="checkbox"><label><input type="checkbox" value="' . $box_values . '">' . $box_titles , '</label></div>' , PHP_EOL;
    }
}
function AddBasicTabsPanel($tabs_ids,$tabs_names,$tabs_data){
    //START TABS HEADERS
    echo '<ul class="nav nav-tabs">';
    //PRINT TABS HEADERS
    $tabs_ids_names_data = new MultipleIterator();
    $tabs_ids_names_data->attachIterator(new ArrayIterator($tabs_ids));
    $tabs_ids_names_data->attachIterator(new ArrayIterator($tabs_names));
    $tabs_ids_names_data->attachIterator(new ArrayIterator($tabs_data));
    foreach ( $tabs_ids_names_data as $ids_names_data ) {
        list($tabs_ids, $tabs_names, $tabs_data) = $ids_names_data;
        echo '<li><a href="#' . $tabs_ids . '" data-toggle="tab">' . $tabs_names . '</a></li>' , PHP_EOL;
    }
    //END TABS HEADERS
    echo '</ul>';
    //START TAB PANES
    echo '<div class="tab-content">';
    //PRINT TAB PANES
    foreach ( $tabs_ids_names_data as $ids_names_data ) {
        list($tabs_ids, $tabs_names, $tabs_data) = $ids_names_data;
        echo '<div class="tab-pane fade" id="' . $tabs_ids . '"><h4>' . $tabs_names . '</h4>' . $tabs_data . '</div>' , PHP_EOL;
    }
    //END TAB PANES
    echo '</div>';
}
我得到了一个包含所有显示数据的适当的tabs元素。图片:

但是,当我想用复选框功能替换tabs_data中的文本时,复选框会显示在带有选项卡的面板之前

AddBasicTabsPanel(["One","Two","Three"],["One","Two","Three"],[AddCheckBoxes("Checkboxes",["20","39","31"],["One","Two","Three"]),"Some data","More data"]);
图片:


我花了几个小时试图解决这个问题,但不知道如何使用复选框函数作为创建选项卡的面板函数的参数。我哪里出错了?

您以前看到过复选框,因为这是函数执行的顺序。您遇到的问题是AddCheckBox在AddBasicTabsPanel之前被调用,它打印出内容并返回null。意思是你的代码是

  • 打印AddCheckBox
  • 调用
    AddBasicTabsPanel([“一”、“二”、“三”]、[“一”、“二”、“三”]、[null”、“一些数据”、“更多数据])
  • 您可以从执行类似操作的方法返回字符串

    function AddCheckBoxes($title,$box_values,$box_titles) {
        $result = '';
        $result+= '<div class="form-group"><label>' . $title . '</label>';
        $boxes_values_titles = new MultipleIterator();
        $boxes_values_titles->attachIterator(new ArrayIterator($box_values));
        $boxes_values_titles->attachIterator(new ArrayIterator($box_titles));
        foreach ( $boxes_values_titles as $value ) {
            list($box_values, $box_titles) = $value;
            $result+= '<div class="checkbox"><label><input type="checkbox" value="' . $box_values . '">' . $box_titles . '</label></div>' . PHP_EOL;
        }
    
        return $result;
    }
    
    此外,您不需要
    乘法器()

    函数添加复选框($title,$checkbox){
    $result=''.$title';
    foreach($checkbox作为$checkbox){
    $result+='.$checkbox['title].'.PHP\u EOL;
    }
    返回$result;
    }
    $复选框=[
    [
    “标题”=>“复选框1标题”,
    “值”=>20,
    ],
    [
    “标题”=>“复选框2标题”,
    “值”=>39,
    ],
    ];
    $checkboxHtml=addcheckbox('Checkbox-title',$Checkbox);
    
    @Biffen感谢您编辑代码!因为
    addcheckbox
    为复选框输出html。对于您的情况,它应该以字符串形式返回此html,该字符串将作为参数传递给
    AddBasicTabsPanel()
    。我尝试在foreach函数中的“//PRINT TAB PANES”之后放置“return”而不是“echo”,但没有显示结果。也许我把“返回”放错地方了?我还是一名PHP初学者:)
    addCheckBox
    应该返回值,而不是
    AddBasicTabsPanel
    。我如何才能实现addCheckBox以字符串形式返回html?感谢回复!我试过了,但无法让您的第一个代码正常工作。感谢您提醒我们,每个参数可以代表一个选项卡,因为它使阅读和编码更加清晰。我使用multipleiterator是因为代码整洁,因为我在一个小组中工作,这使它更易于阅读(PHP代码不多,所以不会太慢页面加载)
    function AddCheckBoxes($title,$box_values,$box_titles) {
        $result = '';
        $result+= '<div class="form-group"><label>' . $title . '</label>';
        $boxes_values_titles = new MultipleIterator();
        $boxes_values_titles->attachIterator(new ArrayIterator($box_values));
        $boxes_values_titles->attachIterator(new ArrayIterator($box_titles));
        foreach ( $boxes_values_titles as $value ) {
            list($box_values, $box_titles) = $value;
            $result+= '<div class="checkbox"><label><input type="checkbox" value="' . $box_values . '">' . $box_titles . '</label></div>' . PHP_EOL;
        }
    
        return $result;
    }
    
    $tab1 = [
        'id' => 'tab1-id',
        'name' => 'tab1-name',
        'data' => 'tab1-data',
    ];
    
    $tab2 =  [
        'id' => 'tab2-id',
        'name' => 'tab2-name',
        'data' => YourMethodThatReturnsWhateverHTMLYouWant(),
    ];
    
    AddBasicTabsPanel($tab1, $tab2);
    
    function AddCheckBoxes($title, $checkboxes) {
        $result = '<div class="form-group"><label>' . $title . '</label>';
    
        foreach($checkboxes as $checkbox) {
            $result+= '<div class="checkbox"><label><input type="checkbox" value="' . $checkbox['value'] . '">' . $checkbox['title] . '</label></div>' . PHP_EOL;  
        }
    
        return $result;
    }
    
    $checkboxes = [
        [
            'title' => 'checkbox1-title',
            'value' => 20,
        ],
        [
            'title' => 'checkbox2-title',
            'value' => 39,
        ],
    ];
    
    $checkboxHtml = AddCheckBoxes('Checkbox-title', $checkboxes);