我有一个嵌套的while循环来获取大型菜单。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
这里你可以看到,虽然我得到了所有需要的数据,但这个未定义的索引错误似乎是凭空出现的。我不明白为什么会这样。请帮忙。
最佳答案
您正在内部while循环中设置$project['ccname']
。但如果没有子类别,则不会输入循环。这也是浪费,因为在每次循环迭代中都会一次又一次地覆盖它。
while($childCatResult = $childCatSQL->fetch()) {
$childCats[] = $childCatResult;
$project['ccname'] = $childCats; // <-- wan't be set if there are no child categories
}
$childCat[] = $project;
您需要将
$project['ccname'] = $childCats;
设置在内部while循环之外。 while($childCatResult = $childCatSQL->fetch()) {
$childCats[] = $childCatResult;
}
$project['ccname'] = $childCats; // <---------- here
$childCat[] = $project;
关于php - PHP嵌套的foreach()给出警告:为foreach()提供的参数无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51410304/