2016-09-28 1 views
0

Ich habe eine Art "Karte" für etwas, was ich arbeite. Ich zeichne jede Kachel aus und überprüfe dann anhand einer Datenbank, ob sich jemand auf dieser Kachel befindet.PHP erhalten Ergebnisse von MySQL in einer for() Schleife

Der Code funktioniert aber nur für das erste Ergebnis in der Datenbank.

Kann jemand helfen. Danke vielmals.

$sqlw = "SELECT id, player_coord_x, player_coord_y FROM player_game WHERE  world_id='$world'"; 
$world_result = $player_stat->query($sqlw); 


?> 

<div class='map-grid'> 

    <? 
    $id = ''; 
    $size = 16; 
    for($i = 1; $i <= $size; $i++) { 
     echo "<div class='map-grid-row'>"; 
     for ($j=1; $j <= $size; $j++) { 

      // check for player at location 
      if ($world_result->num_rows > 0) { 
       while($w_row = $world_result->fetch_assoc()) { 

        $player_coord_x = $w_row['player_coord_x']; 
        $player_coord_y = $w_row['player_coord_y']; 
        $id = $w_row['id']; 

       } 
      } 

      if ($player_coord_x == $i and $player_coord_y == $j){ 

       echo "<div class='map-grid-cell high'>"; 
       echo "XXX"; 
       echo "</div>"; 
      }else{ 

       echo "<div class='map-grid-cell high'>"; 
       echo "<span class=\"map-small\">(x-$i y-$j)</span>"; 
       echo "</div>"; 
      } 

     } 
     echo "</div>"; 
    } 
    ?> 

</div> 
+3

ein Array verwenden, keine Variable. '$ player_coord_x' wird nur den letzten Datensatz haben. Verwende '$ player_coord_x []'. – chris85

+3

... oder führen Sie die gesamte Verarbeitung in der 'fetch_assoc'-Schleife aus. – chris85

+0

Ich habe versucht ein paar Dinge basierend auf Ihren Informationen, aber ich könnte es zur Arbeit zu bekommen, würde es Ihnen etwas ausmachen, mir ein Beispiel zu geben bitte – Mystic

Antwort

0
$sqlw = "SELECT id, player_coord_x, player_coord_y FROM player_game WHERE world_id='$world'"; 
$world_result = $player_stat->query($sqlw); 

if($world_result->num_rows > 0){ 
    while($w_row = $world_result->fetch_assoc()){ 
    //first type of array 
    $player[] = array(
     'x'  => $w_row['player_coord_x'], //your player X record 
     'y'  => $w_row['player_coord_y'], //your player Y record 
     'id'  => $w_row['id'] //your player id 
    ); 

    //second type of array 
    // OR store player's X and Y as key of array 
    $player[$w_row['player_coord_x'] . '-' . $w_row['player_coord_y']] = $w_row['id']; 
    // This are only if the player record will never repeat 
    } 
} 

?> 

<div class="map-grid"> 
    <?php 
    $size = 16; 
    for($i = 1; $i <= $size; $i++){ 
     echo '<div class="map-grid-row">'; 
     for($j = 1; $j <= $size; $j++){ 
     //with first type of array 
     $exists = false; 
     foreach($player as $play){ 
      if($play['x'] == $i && $play['y'] == $j){ 
      $exists = true; 
      break; // break the loop once you got the result. 
      } 
     } 
     if($exists){ //Player exists? if no detect in foreach loop above, default exists would return false. 
      echo '<div class="map-grid-cell high">'; 
      echo 'XXX'; 
      echo '</div>'; 
     } else { 
      echo '<div class="map-grid-cell high">'; 
      echo '<span class="map-small">(x-' . $i . ' y-' . $j . ')</span>'; 
      echo '</div>'; 
     } 



     //second type of array 
     //Check if the key exists and if it's empty. 
     if(isset($player[$i.'-'.$j]) && !empty($player[$i.'-'.$j])){ 
      echo '<div class="map-grid-cell high">'; 
      echo 'XXX'; 
      echo '</div>'; 
     } else { 
      echo '<div class="map-grid-cell high">'; 
      echo '<span class="map-small">(x-' . $i . ' y-' . $j . ')</span>'; 
      echo '</div>'; 
     } 
     } 
    } 
    ?> 
</div> 
+0

danke für Ihren Code. Ich habe es ausprobiert, das Grid zeichnet immer noch erfolgreich, aber ich bekomme keine Ergebnisse aus meiner Datenbank. – Mystic

+0

eigentlich mein Fehler, ich machte einen Tippfehler beim Herstellen einer Verbindung zur Datenbank. Vielen Dank, du Code wirklich hat mir geholfen – Mystic