【发布时间】:2015-04-09 20:06:06
【问题描述】:
PHP 新手并试图创建一个嵌套列表,可能这样做很草率,但考虑到了特定的结构。我正在尝试检查列表结构是否与数据库值匹配。
问题:似乎无法在第三个 foreach 循环(引用数据库的循环)内迭代“buildValue”和“floorValue”变量(在 foreach1 和 2 中创建)。还尝试了 while 循环,结果相同。
是否有其他方法可以实现这一点,或者我做错了什么/愚蠢?
$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 楼层=02 建造=1 楼层=4 建造= 1楼=3楼=1楼=2楼=1楼=1楼=1楼=0楼=1楼=01楼=1楼=02楼=2楼=4楼=2楼=3楼=2楼=2 楼=2 楼=1 楼=2 楼=0 楼=2 楼=01 楼=2 楼=02
问题输出: 建造=0 楼层=4 建造=0 楼层=4 建造=0 楼层=4 建造=0 楼层=4 建造=0 楼层=4 建造=0 楼层=4 建造=0 楼层=4 建造=0 楼层=4
$RoomArray 输出(除了最后的空数组之外似乎正确): Array ( [0] => Array ( [room_id] => 1 [room] => 112 [floor] => 1 [building] => 3 ) [1] => Array ( [room_id] => 2 [room] => 111 [楼层] => 1 [建筑物] => 3) [2] => 数组 ([room_id] => 3 [房间] => 116 [楼层] => 1 [建筑物] => 4) [3 ] => Array ( [room_id] => 4 [room] => 115 [floor] => 1 [building] => 4) [4] => Array ( [room_id] => 5 [room] => 114 [ floor] => 1 [building] => 4) [5] => Array ([room_id] => 6 [room] => 113 [floor] => 1 [building] => 4) [6] => Array ( [room_id] => 7 [房间] => 110 [楼层] => 1 [建筑物] => 5) [7] => 数组 ( [room_id] => 8 [房间] => 109 [楼层] => 1 [建筑] => 5) ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( ) 数组 ( )
也许我应该改写这个问题....以上来自我的数据库(尽管数据会大得多),除了 3 栋楼和 6 层楼,我需要一个嵌套列表,例如:
-Building1
-Floor1
-Room121
-Building2
-Floor1
-Floor2
-Room221
等
【问题讨论】:
-
我相信 pdo fetchAll 将其输出为 key=>val;在 roomArray 上做一个 var_dump。
-
你在哪里设置
$building和$rooms?在第一次迭代中从$rooms获取所有行后,除非您倒带,否则您不能再次调用$fetchAll。但它每次都会返回相同的东西,那么为什么需要在foreach循环中这样做呢? -
你的问题涉及
$buildValue和$floorValue,但是代码中没有这样的变量。你的意思是$buildVal和$floorVal? -
$roomArray 按预期输出....问题似乎出在 foreach 变量上。是的 $buildVal 和 $floorVal
-
$building 和 $floors 由 foreach1 和 2 中的 $buildingArray 值创建。$rooms 是查询的 pdo 结果。