我可以在PHP中的另一个函数的参数内声明一个函数吗?

时间:2016-01-21 03:45:29

标签: php

我正在编写帮助函数,允许我快速构建表。我有一个名为responsive_table的函数,它接受两个参数:标题和行。这些行是动态的,是从数据库中提取的。我使用foreach循环构建一个行数组,因为某些db表行与html表的内容或顺序不匹配... html表中的某些单元格包含db列等的组合,并且可以不直接从数据库中显示。我的HTML表数组中没有显示任何行。正在显示在函数参数中声明的函数内部的任何内容。这是我的代码:

<?php
$output = responsive_table(array('<input type="checkbox" name="all">', 'Thumbnail', 'Title', 'Location', 'Author', 'Date Submitted', 'Actions'), function(){
    foreach($listing_results as $listing){
        $listings[] = array(
            '<input type="checkbox" name="delete[]" value="'.$listing['listing_id'].'">',
            '<img src="http://placehold.it/50x50" alt="Thumbnail">',
            $listing['title'],
            $listing['location'],
            anchor('members/modify/'.$listing['member_id'], $listing['display_name']),
            date($setting['date_format'], $listing['date_submitted']),
            array(
                array(
                    'title' => 'Modify Listing',
                    'color' => 'primary',
                    'href' => 'listings/modify/'.$listing['listing_id'],
                    'text' => '<i class="fa fa-pencil"></i>'
                ),
                array(
                    'title' => 'Delete Listing',
                    'color' => 'danger',
                    'href' => 'listings/delete/'.$listing['listing_id'],
                    'text' => '<i class="fa fa-eraser"></i>',
                    'confirm' => true
                )
            )
        );
    }
    return $listings;                       
});

 echo $output;

function responsive_table($headings = array(), $rows = array(), $sortable = false){

    $output = '
                                <div class="table-responsive">
                                    <table data-sortable class="table">
                                        <thead>
                                            <tr>
                                                ';

    if(count($headings) > 0){

        foreach($headings as $heading){

            $output .= '
                                                <th>'.$heading.'</th>';

        }

    }

    $output .= '
                                            </tr>
                                        </thead>
                                        <tbody>';

    if(count($rows) > 0){

        foreach($rows as $row){

            $output .= '
                                            <tr>
                                                <td>'.$row.'</td>
                                            </tr>';

        }

    }

    $output .= '
                                    </table>
                                </div>';

    return $output;

}

2 个答案:

答案 0 :(得分:0)

任何有效的PHP代码都可能出现在函数内部,甚至是其他函数和类定义。你试图做的是使用匿名函数,也称为闭包。这是一个可能会帮助您解决此问题的链接PHP anonymous functions

答案 1 :(得分:0)