我有一个嵌套的while循环,可以获取Mega菜单。 while循环返回我确切想要的正确数组数据。我试图通过使用foreach()来反映这一点,但出现错误。
这是我的PHP
$cats = array();
$catSQL = $pdo->prepare("SELECT * FROM category");
$catSQL-> execute();
while($rowCat = $catSQL->fetch()) {
$cat = array();
$cat['id'] = $rowCat['cat_id'];
$cat['name'] = $rowCat['cat_name'];
$childCat = array();
$subCatSQL = $pdo->prepare("SELECT * FROM sub_category WHERE sc_cat = ".$rowCat['cat_id']);
$subCatSQL-> execute();
while($subCatResult = $subCatSQL->fetch()) {
$subCatID = $subCatResult['sc_id'];
$project = $subCatResult;
$childCats = array();
$childCatSQL = $pdo->prepare("SELECT * FROM child_category WHERE cc_subcat=".$subCatID);
$childCatSQL-> execute();
while($childCatResult = $childCatSQL->fetch()) {
$childCats[] = $childCatResult;
$project['ccname'] = $childCats;
}
$childCat[] = $project;
}
$cat['categories'] = $childCat;
$cats[] = $cat;
// echo "<pre>"; print_r($cat);
}
foreach($cats as $cat){
echo "<p>".$cat['name']."</p>";
foreach($cat['categories'] as $subcat){
echo "<p>".$subcat['sc_name']."</p>";
foreach($subcat['ccname'] as $childcat){
echo "<p>".$childcat['cc_name']."</p>";
}
}
}
这是我来自print_r($cat);
的数组数据
Array
(
[id] => 1
[name] => Computers
[categories] => Array
(
[0] => Array
(
[sc_id] => 1
[0] => 1
[sc_cat] => 1
[1] => 1
[sc_name] => Laptops
[2] => Laptops
[ccname] => Array
(
[0] => Array
(
[cc_id] => 1
[0] => 1
[cc_subcat] => 1
[1] => 1
[cc_name] => Hewlett-Packard
[2] => Hewlett-Packard
)
[1] => Array
(
[cc_id] => 2
[0] => 2
[cc_subcat] => 1
[1] => 1
[cc_name] => Dell
[2] => Dell
)
[2] => Array
(
[cc_id] => 3
[0] => 3
[cc_subcat] => 1
[1] => 1
[cc_name] => Lenovo
[2] => Lenovo
)
[3] => Array
(
[cc_id] => 4
[0] => 4
[cc_subcat] => 1
[1] => 1
[cc_name] => Acer
[2] => Acer
)
)
)
[1] => Array
(
[sc_id] => 2
[0] => 2
[sc_cat] => 1
[1] => 1
[sc_name] => Desktops
[2] => Desktops
[ccname] => Array
(
[0] => Array
(
[cc_id] => 5
[0] => 5
[cc_subcat] => 2
[1] => 2
[cc_name] => Dell
[2] => Dell
)
[1] => Array
(
[cc_id] => 6
[0] => 6
[cc_subcat] => 2
[1] => 2
[cc_name] => Lenovo
[2] => Lenovo
)
)
)
)
)
Array
(
[id] => 2
[name] => Components
[categories] => Array
(
[0] => Array
(
[sc_id] => 3
[0] => 3
[sc_cat] => 2
[1] => 2
[sc_name] => Monitors
[2] => Monitors
)
[1] => Array
(
[sc_id] => 4
[0] => 4
[sc_cat] => 2
[1] => 2
[sc_name] => Printers
[2] => Printers
)
[2] => Array
(
[sc_id] => 5
[0] => 5
[sc_cat] => 2
[1] => 2
[sc_name] => Scanners
[2] => Scanners
)
[3] => Array
(
[sc_id] => 6
[0] => 6
[sc_cat] => 2
[1] => 2
[sc_name] => Web Cameras
[2] => Web Cameras
)
)
)
这是我在页面中收到的带有错误的数据。
Computers
Laptops
Hewlett-Packard
Dell
Lenovo
Acer
Desktops
Dell
Lenovo
Components
Monitors
Notice: Undefined index: ccname in E:\xampp\htdocs\flexicart\common-codes.php on line 54
Warning: Invalid argument supplied for foreach() in E:\xampp\htdocs\flexicart\common-codes.php on line 54
Printers
Notice: Undefined index: ccname in E:\xampp\htdocs\flexicart\common-codes.php on line 54
Warning: Invalid argument supplied for foreach() in E:\xampp\htdocs\flexicart\common-codes.php on line 54
Scanners
Notice: Undefined index: ccname in E:\xampp\htdocs\flexicart\common-codes.php on line 54
Warning: Invalid argument supplied for foreach() in E:\xampp\htdocs\flexicart\common-codes.php on line 54
Web Cameras
Notice: Undefined index: ccname in E:\xampp\htdocs\flexicart\common-codes.php on line 54
Warning: Invalid argument supplied for foreach() in E:\xampp\htdocs\flexicart\common-codes.php on line 54
在这里您可以看到,尽管我获取了所有我需要的数据,但似乎仍然无处发生此未定义索引错误。我不明白为什么会这样。请帮忙。
答案 0 :(得分:2)
您正在内部while循环中设置$project['ccname']
。但是,如果没有子类别,则不会输入循环。这也是浪费的,因为您在每次循环迭代中都一次又一次地覆盖它。
while($childCatResult = $childCatSQL->fetch()) {
$childCats[] = $childCatResult;
$project['ccname'] = $childCats; // <-- wan't be set if there are no child categories
}
$childCat[] = $project;
您需要在内部while循环之外设置$project['ccname'] = $childCats;
。
while($childCatResult = $childCatSQL->fetch()) {
$childCats[] = $childCatResult;
}
$project['ccname'] = $childCats; // <---------- here
$childCat[] = $project;