簡體   English   中英

從MySQL到HTML表格的坐標(PHP,PDO,MySQL)

[英]Coordinates from MySQL to HTML table (PHP, PDO, MySQL)

我正在創建使用MySQL數據庫創建“運動場”的游戲。

在我的MySQL表中,我有兩列pointXpointY ,均為INT 我也可以使用POINT ,但對我而言,這兩列是更好的解決方案。

| id | pointX | pointY | player | game |
|----|--------|--------|--------|------|
| 1  | -2     | 1      | 7      | 10   |
| 2  | -3     | 2      | 5      | 10   |
| 3  | 2      | -2     | 2      | 10   |
| 4  | -2     | -1     | 1      | 10   |

我應該從該MySQL表生成HTML表。 這樣的事情,但是沒有坐標頭(下面只是為了更容易理解):

|-----|----|----|----|----|----|----|
| Y/X | -3 | -2 | -1 | 0  | 1  | 2  |
|-----|----|----|----|----|----|----|
| -2  |    |    |    |    |    | 2  |
|-----|----|----|----|----|----|----|
| -1  |    | 1  |    |    |    |    |
|-----|----|----|----|----|----|----|
| 0   |    |    |    |    |    |    |
|-----|----|----|----|----|----|----|
| 1   |    | 7  |    |    |    |    |
|-----|----|----|----|----|----|----|
| 2   | 5  |    |    |    |    |    |
|-----|----|----|----|----|----|----|

另外,每個<td>應該具有屬性data-cell ,其中包括坐標,例如data-cell="-2x-1"

最好的入門方法是什么?

$rng = $dbh->prepare('
  SELECT   MIN(pointX) AS minX, MIN(pointY) AS minY,
           MAX(pointX) AS maxX, MAX(pointY) AS maxY
  FROM     field
  WHERE    game = ?
  LOCK IN SHARE MODE
');
$qry = $dbh->prepare('
  SELECT   pointX, pointY, player
  FROM     field
  WHERE    game = ?
  ORDER BY pointX, pointY
');
$dbh->beginTransaction();
$rng->execute([$game_id]);
$qry->execute([$game_id]);
$dbh->rollBack();

$limits = $rng->fetch();
$player = $qry->fetch();
echo '<table>';
for ($y = $limits['minY']; $y <= $limits['maxY']; $y++) {
  echo '<tr>';
  for ($x = $limits['minX']; $x <= $limits['maxX']; $x++) {
    printf('<td data-cell="%dx%+dy">', $x, $y);
    if ($player and $player['pointX'] == $x and $player['pointY'] == $y) {
      echo htmlentities($player['player']);
      $player = $qry->fetch();
    } else {
      echo '&nbsp;';
    }
    echo '</td>';
  }
  echo '</tr>';
}
echo '</table>';

看來您已經有了一個良好的開端。 假設X和Y的像元數分別為$ xcells和$ ycells,我下一步將要像這樣構建表:

echo "<table>";
for ($i = -3; $i < $ycells; i++) {
  echo "<tr>";
  for ($j = -3; $j < $xcells; j++) {
    echo "<td data-cell='" . $i . "y" . $j . "x'>";
  }
  echo "</tr>";
}
echo "</table>";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM