2013-04-27 3 views
0
global $mysqli; 
    $building = $position['buildingID'];  
    if($level == 'room') { 

     // Get building size 
     $buildingQuery = "SELECT * FROM buildings WHERE buildingID = '$building'"; 
     $buildingArea = $mysqli->query($buildingQuery) or die(mysqli_error($mysqli)); 
     $Area = $buildingArea->fetch_array(MYSQLI_ASSOC); 
     $AreaX = $Area['areaX']; 
     $AreaY = $Area['areaY']; 

     $sql = "SELECT * FROM rooms WHERE buildingID = '$building'"; 
     $result = $mysqli->query($sql) or die(mysqli_error($mysqli)); 
     $rooms = $result->fetch_array(MYSQLI_ASSOC); 

     for($y = 0; $y <= $AreaY; $y++){ 
      for($x = 0; $x <= $AreaX; $x++) { 
       //See if room exists for coordinates 
        if(($rooms['position_x'] == $x) && ($rooms['position_y'] == $y) 
         && ($position['room_x'] == $x) && ($position['room_y'] == $y)) { 
         echo '<img src="../../resources/images/inroom.php" id="'.$x.'_'.$y.'" />'; 
         echo ' '; 
        } else if (($rooms['position_x'] == $x) && ($rooms['position_y'] == $y)) { 
          echo '<img src="../../resources/images/inroom.php" id="'.$x.'_'.$y.'" />'; 
          echo ' '; 
        } else { 
         echo "(".$x.","." ".$y.")"; 
         if ($x == $AreaX) { 
          echo '<br />'; 
         } 
        } 
      } 
     } 
    } 
} 

В основном проблема заключается в том, что у меня есть сетка, мне нужно отобразить результирующий набор, где координата X и Y, выровнять по базе данных, но я действительно не понимаю, как увеличить строки, которые я извлекаю, любые советы?PHP приращение через набор данных

EDIT: Код обновления

+0

Я действительно знаю, что в настоящее время он заканчивается бесконечным циклом. –

+0

Почему вы получаете информацию о своей комнате внутри циклов for? Возможно, это изменится? Почему бы не сделать это за пределами петель? Также вы должны просмотреть условие while. Если я правильно понимаю вашу проблему, есть множество комнат, и вам нужно найти те комнаты, которые имеют одинаковые позиции x и y, не так ли? – Dan

+0

Можно изменить, и каждое здание имеет другую схему, и вы правы, да, цикл while сломан, но я не уверен, как/почему. –

ответ

0

Попробуйте это. Я взял ваш выбор комнат и взял его за петли. Затем я создал карту координат комнаты. Таким образом, вам нужно только пройти через комнаты один раз вместо того, чтобы делать это для каждой строки и столбца сетки.

Затем, чтобы округлить его, я перебираю сетку и проверяю, находятся ли координаты на карте. Если они есть, мы нашли комнату, иначе мы нашли пробел.

$rooms = $result->fetch_array(MYSQLI_ASSOC); 

$map = array(); 

foreach($rooms as $room) 
{ 
    $position_x = $room['position_x']; 
    $position_y = $room['position_y']; 
    $map[$position_x][$position_y] = $room; 
} 

for($y=0;$y<=$AreaY;$y++) 
{ 
    for($x = 0; $x <= $AreaX; $x++) 
    { 
     if(isset($map[$x][$y])) 
     { 
      // room 
     } 
     else { 
      // blank 
     } 
    } 
} 
+0

Работает чудесно, иногда вам просто нужна свежая перспектива. Спасибо: D –

+0

Добро пожаловать. :) – Dan

Смежные вопросы