PHP:使用特定功能格式化每个表列

标签 php html mysql html-table

我想打印 HTML 表格(30 多列,500 多行),但在此之前我必须对几乎每一列值应用不同的函数。

$sampleData = array(
    0 => array(
        'date' => '2015-10-20',
        'time' => '12:30:00',
        'price' => 500,
        'currency' => 'EUR'
    ),
    1 => array(
        'date' => '2015-10-21',
        'time' => '08:10:00',
        'price' => 250,
        'currency' => 'USD'
    ),
    2 => array(
        'date' => '2015-10-22',
        'time' => '21:45:00',
        'price' => 300,
        'currency' => 'EUR'
    )
);

到目前为止,我通过列数组和使用 call_user_func 调用的函数名称解决了这个问题。

$cols = array(
    'date' => 'self::formatDate',
    'time' => 'self::formatTime'
);

然后创建这样的表:

$htmlRows = '';
foreach ($sampleData as $row) {
    $htmlRows .= '<tr>';

    foreach ($cols as $th => $function) {
        $htmlRows .= '<td>'.call_user_func($cols[$th], $row[$th]).'</td>';
    }

    $htmlRows .= '</tr>';
}

对我来说,这看起来是非常优雅的解决方案,但我坚持如何使用两个或更多参数调用函数,例如formatPrice($price, $currency); 在第三列,而其值存储在第三和第四个键下。或者有更好的方法来格式化表格列吗?

谢谢,抱歉英语不好

最佳答案

提议:

以一种可以轻松拆分、迭代并传递收集的值的方式合并要用于特定列的所有字段。

$cols = array(
    'date' => 'self::formatDate',
    'time' => 'self::formatTime',
    'price,currency' => 'self::formatPrice',
);

$htmlRows = '';
foreach ($sampleData as $row) {
    $htmlRows .= '<tr>';

    foreach ($cols as $group => $function) {
        $data = array();
        $fields = explode(',', $group);
        foreach ($fields as $field) {
            $data[$field] = $row[$field];
        }
        $htmlRows .= '<td>'.call_user_func($cols[$th], $data).'</td>';
    }

    $htmlRows .= '</tr>';
}

您必须调整您的formatXxx()函数来解释不同的表示。

使用实际的类名而不是 self 实际上是一个好主意。在 $cols 数组中,因为如果将函数声明为私有(private)并扩展类,将找不到这些函数。

关于PHP:使用特定功能格式化每个表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33277742/

相关文章:

php - XPATH - 当内部节点命名空间不同时返回一个节点下的整个对象

javascript - 比较最多三个日期选择器字段中的日期,然后用最早的字段填充另一个字段

php - 如何修复带有 PDOException 错误的 magento 重新索引?

mysql和visual studio : ado.net

崩溃时mysql事务超时和连接心跳

php - 使用 Bootstrap 的自定义通知

php - 如何使用 Laravel 根据特定列选择 unique() 模型?

php - 如何比较两个输入变量与mysql存储值(PHP)?

javascript - 需要时间绑定(bind)的 jQuery slider 插件

html - 具有自动高度的页眉和页脚的可滚动主体