我需要使用 PHP 根据来自数据库 (mysql) 的信息生成 html 表。问题是我不知道该表有多少列和行(用户可以添加列和行)。我不知道如何选择特定的行“类型”。我有表选项,options_cats(选项类别)。当您知道自己有多少列时很容易,但是当您不知道时该怎么办? :)
例子:
Size | Color | -> this will be column names(user can add many as he want), it's selected from options_cats table, column 'name'.
现在我需要按类型(例如尺寸、颜色......)选择选项并将其放在正确的列中。
<table class="table table-bordered">
<thead>
<tr>
@foreach($ops as $op)
<th>{{$op->title}}</th>
@endforeach
</tr>
</thead>
<tbody>
@foreach($ops as $op)
<tr>
@foreach($op->options as $option)
<td>{{$option->name}}</td>
@endforeach
</tr>
@endforeach
</tbody>
</table>
$操作->
public function options($prod_id) {
$data = array();
$cats = DB::table('options_cats')->where('prod_id', $prod_id)->get();
foreach ($cats as $cat) {
$cat->options = DB::table('options')->where('category', $cat->id)
->where('prod_id', $cat->prod_id)->get();
$data[] = $cat;
}
return $data;
}
但现在结果是:
Paper size Orientation
A4 A3
Landscape Portrait
在我了解如何制作之后,我将放置“类型”列。
编辑: 我在管理中有一个页面,我可以在其中添加该选项的选项和类别,当我添加新的类别选项(纸张尺寸例如)时,将有一个输入,您可以在其中添加纸张尺寸的选项,例如。 A4(你可以根据需要添加很多),如果我为ex添加颜色选项类别。比您需要为添加的选项输入纸张尺寸和颜色。我希望你现在明白了:)
最佳答案
这是生成列数可变的表格的一种方法:
<table class="table table-bordered">
<thead>
<tr>Type</tr>
<tr>
@foreach($rows[0]['columns'] as $columns)
<th>{{$columns['title'])}}</th>
@endforeach
</tr>
</thead>
<tbody>
@foreach($rows as $row)
<tr>
<td>$rows['type']</td>
</tr>
<tr>
@foreach($row['columns'] as $column)
<td>{{$column['value']}}</td>
@endforeach
</tr>
@endforeach
</tbody>
</table>
要使用完全相同的代码,您必须像这样用您的数据生成一个数组:
$rows = array(
array(
'type' => 'Car',
'columns' => array(
array('title' => 'Color', 'value' => 'Blue'),
array('title' => 'Size', 'value' => '10'),
),
array(
array('title' => 'Color', 'value' => 'Red'),
array('title' => 'Size', 'value' => '11'),
),
),
array(
'type' => 'Paper',
'columns' => array(
array('title' => 'Color', 'value' => 'Blue'),
array('title' => 'Size', 'value' => '10'),
),
array(
array('title' => 'Color', 'value' => 'Red'),
array('title' => 'Size', 'value' => '11'),
),
),
);
编辑
你在我写答案的时候发布了你的代码,你的表看起来很像我的,甚至类都是一样的,只是你使用的是集合而我使用的是数组。
编辑 2
看起来您需要交换列和行。所以你有一些选择:
1) 通过 SQL 生成一个已经反转的结果集。由于列数未知,您可能需要处理动态 SQL,这是 MySQL 中的示例
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT('MAX(CASE WHEN b.Race_Number = ', Race_Number,
' THEN b.Place END) AS ', CONCAT('`Race', Race_Number, '`'))
) INTO @sql
FROM Table2;
SET @sql = CONCAT('SELECT s.Student_name, ', @sql, '
FROM Table1 a
LEFT JOIN Table2 b
ON ON a.ID = b.ID
GROUP BY a.ID, a.Name');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
2) 将更多代码添加到 options()
以生成包含您的结果的数组。基本上,您必须阅读所有列并将它们设为行。
3) 使用 Javascript 在运行时交换它们。
关于PHP/MySQL 生成表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21332081/