我想获取所有值以显示它们的php前端页面。我有 数据库中有两个表。 1)类别 - cat_id,cat_name; 2)产品 - pro_id,cat_id,cat_name,pro_name,price;
我的 product.php 文件代码:
<div class="content">
<div class="content_top">
<?php
$product = new Product();
$getProduct = $product->getAllProduct();
if(!empty($getProduct)){
foreach($getProduct as $categoryName) {
?>
<div class="heading">
<h3>Latest from <?php echo $categoryName['cat_name']; ?></h3>
</div>
</div>
<?php foreach($getProduct['cat_name'] as $detail=> $row){?>
<div class="section group">
<h2><?php echo $row['product_id']?></h2>
<h2><?php echo $row['product_name']?></h2>
<p><?php echo $row['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 ) {
$tmp = array(
$id => array(
'cat_id' => $val['cat_id'],
'cat_name' => $val['cat_name'],
'product' => $product1[$id],
));
array_push($product2, $tmp);
}
return $product2;
}
**
但输出显示如下错误:最新消息:未定义 index:第10行中的cat_name注意:未定义的索引:行中的cat_name 13警告:第13行中为foreach()提供的参数无效
**
答案 0 :(得分:0)
您使用的是二维数组:
$tmp = array(
$id => array(
'cat_id' => $val['cat_id'],
'cat_name' => $val['cat_name'],
'product' => $product1[$id],
));
但按原样访问它是一维的:
echo $categoryName['cat_name']
首先,var_dump你的数组,以准确查看它包含的数据。然后访问它适当的深度。
答案 1 :(得分:0)
我可以看到两个问题:
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]
);
}
不要使用索引,请使用字符串键。这样,通过查看调用的键,你就会知道你正在使用什么数据,这样会更难犯错误。此外,通过使用数字索引,更改您在查询中选择的字段的顺序,或者只是添加/删除一个将会搞砸您的代码,因为索引将索引不同的信息。
foreach($product as $id=> $val ) {
$tmp = array(
$id => array(
'cat_id' => $val['cat_id'],
'cat_name' => $val['cat_name'],
'product' => $product1[$id],
));
array_push($product2, $tmp);
}
通过这样做,$product2
的输出将如下所示 - 假设您获得的条目的ID是连续的:
array(
0 => array(
0 => array(
'cat_id' => '<some id>',
'cat_name' => '<some name>',
'product' => array(
'product_id' => '<some id>',
'product_name' => '<some name>',
'price' => '<some price>'
)
)
),
1 => array(
1 => array(
'cat_id' => '<some id>',
'cat_name' => '<some name>',
'product' => array(
'product_id' => '<some id>',
'product_name' => '<some name>',
'price' => '<some price>'
)
)
),
2 => array(
2 => array(
'cat_id' => '<some id>',
'cat_name' => '<some name>',
'product' => array(
'product_id' => '<some id>',
'product_name' => '<some name>',
'price' => '<some price>'
)
)
),
3 => array(
3 => array(
'cat_id' => '<some id>',
'cat_name' => '<some name>',
'product' => array(
'product_id' => '<some id>',
'product_name' => '<some name>',
'price' => '<some price>'
)
)
),
etc...
);
因此,将此数组放在您的其他文件中并以这种方式使用它:
$getProduct['cat_name']
无效,因为'cat_name'
位于$getProduct
数组中的数组中。
foreach($getProduct as $categoryName) {
echo $categoryName['cat_name'];
}
也不起作用,你不够深入访问它,你需要再次预告。
你应该把它放在Product.php
:
foreach($product as $id=> $val ) {
$product2[$id] = array(
'cat_id' => $val['cat_id'],
'cat_name' => $val['cat_name'],
'product' => $product1[$id],
);
}
并将line 13
product.php
的块替换为:
<div class="section group">
<h2><?php echo $categoryName['product']['product_id']?></h2>
<h2><?php echo $categoryName['product']['product_name']?></h2>
<p><?php echo $categoryName['product']['price']?></p>
</div>
<?php } } ?>
你不需要你的foreach,因为你只需要查看已经在['product']
中的$categoryName
。