PHP嵌套foreach不迭代父变量


PHP nested foreach not iterating parent varaibles

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>';