PHP/MySQL 在比较网格或表格中显示产品和类别

标签 php mysql comparison

我有两个数据库表如下:

类别表

--- 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/

相关文章:

date - 在 Lua 中比较日期

php - 如何使用php显示上传的csv文件数据

php - 如何将sql行传递到codeigniter中的数组

php - 在 PHP 中跟踪内存使用情况

php - 将日期字符串转换为 mysql 日期时间字段

php - getField 不显示结果

php - 如何在php中将字节数组转换为整数?

mysql - 我们什么时候给 LAST_INSERT_ID() 一个参数?

php - 找出在数组中添加和删除了哪些项目

php - 成功解析 SimpleXMLElement 与 'false' 的比较,返回 'true'