我想打印 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/