PHP页面中的嵌套产品类别

时间:2017-08-23 06:07:48

标签: php nested

我想获取所有值以在PHP前端页面中显示它们。我在数据库中有两个表:

  1. 类别:cat_idcat_name
  2. 产品:pro_idcat_idcat_namepro_nameprice
  3. 我的product.php代码(前端PHP文件):

    <div class="content">
        <div class="content_top">
            <?php
            $product = new Product();
            $getProduct = $product->getAllProduct();
            if (!empty($getProduct)) {
                foreach($getProduct as $row) {
                    ?>
                    <div class="heading">
                        <h3>Latest from <?php echo $row['cat_name']; ?></h3>
                    </div>
                </div>
                <div class="section group">
                    <h2><?php echo $row['product']['product_id']?></h2>
                    <h2><?php echo $row['product']['product_name']?></h2>
                    <p><?php echo $row['product']['price']?></p>
                </div>
                <?php
                }
            }
            ?>           
     </div>
    

    我的Product.php代码(后端类文件):

    public function getAllProduct() {
        $query = "SELECT p.*, c.cat_name, b.brand_name
            FROM product as p, category as c, brand as b
            WHERE p.cat_id = c.cat_id AND p.brand_id= b.brand_id 
            ORDER BY p.product_id DESC";
    
        $data = $this->db->select($query);
        $result = $data->fetch_all();
        $product = array();
        $product1  = array();
        foreach ($result as $row) {
            $product[$row[2]] = array(
                'cat_id' => $row[2],
                'cat_name' => $row[8]
            );
            $product1[$row[2]][$row[0]] = array(
                'product_id' => $row[0],
                'product_name' => $row[1],
                'price' => $row[5]
            );
        }
        $product2 = array();
        foreach ($product as $id => $val) {
            $product2[$id]= array(
                'cat_id' => $val['cat_id'],
                'cat_name' => $val['cat_name'],
                'product' => $product1[$id],
            );
            array_push($product2, $tmp);
        }
        return $product2;
    }
    

    输出显示三个错误,如下所示:

      
        
    1. 注意:未定义的索引:第14行的product_id

    2.   
    3. 注意:未定义的索引:第15行的正文

    4.   
    5. 注意:未定义的索引:第16行的价格

    6.   

1 个答案:

答案 0 :(得分:0)

你似乎有3个表而不是2个? (品牌)。并且您在结果数组中似乎有更多的键作为表中的字段。这使调试变得不那么容易。但除此之外,我认为这是因为您以不同的格式存储产品。看看你的代码的这一部分:

$product1[$row[2]][$row[0]] = array(
  'product_id' => $row[0],
  'product_name' => $row[1],
  'price' => $row[5]
);

您可以按行的索引2和索引0键入数组。

其次是你的代码的这部分

foreach($product as $id=> $val ) {
            $product2[$id]= array(
                    'cat_id' => $val['cat_id'],
                    'cat_name' => $val['cat_name'],
                    'product' => $product1[$id],
            );
            array_push($product2, $tmp);
        }

$tmp变量未被使用,所以很奇怪这不会给你带来错误。

对于body错误,我没有在您的代码中看到它使用,因此您对该错误采用了黑色。

所以使用以下原始问题的固定代码:

$product = array();
    $product1  = array();
    foreach($result as $row) {
        $product[$row[2]] = array(
            'cat_id' => $row[2],
            'cat_name' => $row[8]
        );
        $product1[$row[2]][$row[0]] = array(
            'product_id' => $row[0],
            'product_name' => $row[1],
            'price' => $row[5]
        );
    }
    $product2 =array();
    foreach($product as $id=> $val ) {
        $product2[$id]= array(
                'cat_id' => $val['cat_id'],
                'cat_name' => $val['cat_name'],
                'product' => $product1[$id],
        );
        //array_push($product2, $tmp);
    }

并使用此数组作为我的输入:

$result = array(
  array(
    '1', // p id
    '2', // p cat id
    'product category_name', // p cat name
    'product_x', // p name
    '100', // p price
    'category category name', // c name
    'x', // ?
    'x', // ?
    'x' // ?
  ),
);

我在$product2变量中得到以下数组结构。

array (
  'product category_name' => 
  array (
    'cat_id' => 'product category_name',
    'cat_name' => 'x',
    'product' => 
    array (
      1 => 
      array (
        'product_id' => '1',
        'product_name' => '2',
        'price' => 'category category name',
      ),
    ),
  ),
)

<强> TLDNR;

结论,数组中的'product'键也是一个数组。所以你需要像这样做foreachforeach ($row['product'] as $product => $pid) { ... },所以你的回声看起来像这样:

<h2><?php echo $product['product_id']?></h2>
<h2><?php echo $product['product_name']?></h2>
<p><?php echo  $product['price']?></p>