PHP新手,试图创建一个嵌套列表,可能会做得很草率,但要记住特定的结构。我正在尝试检查列表结构是否与数据库值匹配。
问题:Cant似乎在第三个foreach循环(引用数据库的循环)内迭代"buildValue"answers"floorValue"变量(在foreach1&2中创建)。在循环时也尝试了相同的结果。
有没有其他方法可以实现这一点,或者我做错了什么/愚蠢了?
$htmlArray = array();
$buildingArray = array();
$buildingArray["0"] = array("4","3","2","1","0","01","02");
$buildingArray["1"] = array("4","3","2","1","0","01","02");
$buildingArray["2"] = array("4","3","2","1","0","01","02");
foreach ($buildingArray as $bkey => $building)
{
switch ($bkey)
{
case "0":
$htmlArray[0]['building'] = "Biology";
break;
case "1":
$htmlArray[1]['building'] = "Chemistry";
break;
case "2":
$htmlArray[2]['building'] = "Environmental";
break;
}
$buildVal = $bkey;
foreach ($building as $fkey => $floor)
{
$floorVal = $floor;
$prepend ='Floor ';
$title = $prepend.$floor;
$htmlArray[$fkey]['floor'] = $title;
// Iterate over the items results
//NO PROBLEM: These values (reference foreach1 & foreach2) output correct result!
echo("build=".$buildVal." ");
echo("floor=".$floorVal." ");
$roomArray= array();
$roomArray = $rooms -> fetchAll(PDO::FETCH_ASSOC);
foreach ($roomArray as $row)
{
//PROBLEM: These values (reference foreach1 & foreach2) do not iterate inside foreach 3, only output 1st building and floor!
echo("build=".$buildVal." ");
echo("floor=".$floorVal." ");
//echo any results matching building and floor
if($row["building"] == $buildVal+3 && $row["floor"] == $floorVal)
{
// echo($row["room");
}
}
}
}
无问题输出:建筑=0楼=4楼=0楼=3楼=0层=2楼=0楼层=1楼=0地板=0楼=0楼=01楼=0楼=0楼=1楼=3楼=1楼=2楼=1楼=1楼=0楼-1楼=1楼=1楼=01楼=1层=1楼=02楼=2楼=4楼=2楼=3层=2楼=2楼=2层=1楼=2层=2楼=0楼=2楼=0
问题输出:建筑=0层=4层=0层=4层=0楼=4层=0层=4楼=0楼=4层=0层=4楼=0层=0层=0楼=4楼=0层=0层
$RoomArray输出(除了末尾的空数组外,似乎是正确的):阵列房间]=>114[层]=>1[楼]=>4)[5]阵列([room_id]=>6[room]=>113[floor]=>1[building]=>4)[6]阵列([room_id]=>7[room]=>1[building]=>5)[7]=>阵列()阵列()
也许我应该重新表述这个问题。。。。以上是我的数据库(尽管数据会大得多),除了3栋楼和6层楼,我需要一个嵌套的列表,比如:
-Building1
-Floor1
-Room121
-Building2
-Floor1
-Floor2
-Room221
etc
我可以看到索引$htmlArray变量的一些问题,但我不确定$roomArray进入场景后你在做什么。看看下面的代码,也许会有所帮助。如果不是,请准确地说出$roomArray循环出了什么问题,以及$roomAarray是什么。
编辑我更新了我的答案,检查这是否为您提供了所需的输出。
$buildingArray["0"] = array("4","3","2","1","0","01","02");
$buildingArray["1"] = array("4","3","2","1","0","01","02");
$buildingArray["2"] = array("4","3","2","1","0","01","02");
# Added simple dictionary
$btype = array("Biology","Chemistry","Environmental");
# Prefetch all rooms.
$roomArray= array();
$roomArray = $rooms -> fetchAll(PDO::FETCH_ASSOC);
#
foreach ($buildingArray as $bkey => $building)
{
# This is much nicer than case...
$htmlArray[$bkey]['building'] = $btype[$bkey];
foreach ($building as $fkey => $floor)
{
# Two things here - first, user sprintf instead of '.'.
# Second - You got keys owerwritten with using $fkey as the first key.
$htmlArray[$bkey]['floor'][$fkey]['title'] = sprintf('Floor %s',$floor);
foreach ($roomArray as $room)
{
if($room['building']==($bkey+3) and $room['floor']==$fkey)
{
$htmlArray[$bkey]['floor'][$fkey]['rooms'][$room['room_id']] = $room['room'];
}
}
}
}
echo '<pre>';
print_r($htmlArray);
echo '</pre>';