我有两个数据库表如下:
类别表
--- ID --- Name -- GroupID
1 Cat 1 0
2 Cat 2 0
3 Side 1 1
4 Side 2 1
产品表
--- ID --- Name – CatID – CatID2
1 P1 1 3
2 P2 1 4
3 P4 2 3
4 P3 2 4
5 P5 1 4
根据上表,我将输出以下格式:
- GroupID 为 0 的所有类别作为列名(表头)
- GroupID 为 1 第一列/行的所有类别
- 产品根据组 0 和 1 出现在每一行中
示例输出:
Cat 1 Cat 2
Side 1 P1 P4
Side 2 P2,P5 P3
不知道是不是表结构有误,可以得到一个list categories和products,但是不知道怎么输出上面的表。
最佳答案
这里是我提出的解决方案,我省略了数据库内容以使其更简单。
数据是硬编码数组:
$cats = array(
array(
'id' => 1,
'name' => 'cat 1 '
),array(
'id' => 2,
'name' => 'cat 2 '
),array(
'id' => 3,
'name' => 'cat 3 '
)
);
$side = array(
array(
'id' => 5,
'name' => 'side 1 '
),array(
'id' => 4,
'name' => 'side 2 '
),array(
'id' => 6,
'name' => 'side 3 '
)
);
$products = array(
array(
'id' => 5,
'name' => 'p1',
'cat' => 1,
'side' => 6,
),array(
'id' => 5,
'name' => 'p2',
'cat' => 1,
'side' => 6,
),array(
'id' => 6,
'name' => 'p3',
'cat' => 2,
'side' => 5,
),array(
'id' => 7,
'name' => 'p4',
'cat' => 2,
'side' => 6,
)
);
接下来这个函数用于搜索 cat 和 side 数组并检查产品是否匹配。
function search_p($array, $key, $value, $key2, $value2)
{
$results = array();
if (is_array($array) ) {
if (isset($array[$key]) && $array[$key] == $value && isset($array[$key2]) && $array[$key2] == $value2) {
$results[] = $array;
}
foreach ($array as $subarray) {
$results = array_merge($results, search_p($subarray, $key, $value,$key2, $value2));
}
}
return $results;
}
为了输出表格,我做了以下操作:
<table>
<tr>
<th></th>
<?php
foreach($cats AS $c){
echo '<th>'.$c['name'].'</th>';
}
?>
</tr>
<?php
foreach($side AS $a){
echo '<tr><td>'.$a['name'].'</td>';
foreach($cats AS $c){
echo '<td>';
$p = search_p($products, 'cat', $c['id'], 'side', $a['id']);
foreach($p AS $pc){
echo '-- '.$pc['name'].' -- ';
}
echo '</td>';
}
echo '</tr>';
}
?>
</table>
关于PHP/MySQL 在比较网格或表格中显示产品和类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28110088/