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

PHP/MySQL display product and categories in a comparison grid or table

我有两个数据库table如下:

类别Table

--- ID --- Name -- GroupID
    1      Cat 1     0
    2      Cat 2     0  
    3      Side 1    1
    4      Side 2    1

产品Table

--- ID --- Name – CatID – CatID2
    1       P1      1      3
    2       P2      1      4
    3       P4      2      3
    4       P3      2      4
    5       P5      1      4

基于以上table我将输出以下格式:

示例输出:

        Cat 1   Cat 2
Side 1  P1      P4
Side 2  P2,P5   P3

我不确定table结构是否错误,我可以得到一个列表类别和产品但我不确定如何输出上面的table。

这是我想出的解决方案,我省略了数据库的内容以使其更简单。

数据是硬编码数组:

$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 我做了以下操作:

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