在PHP中生成8x8网格

时间:2011-07-12 23:55:10

标签: php for-loop grid

Explination

通过PHP我生成了一个8x8的div网格。问题不是要发生这种情况(虽然我的方法可能需要改变),而是块的x和y坐标(存储为id)。

守则

class Grid
{
    function __construct()
    {
        $i = 0;
        $w = 'white';
        $b = 'black';
        for($y=1; $y<=8; $y++)
        {
            for($x=1; $x<=8; $x++)
            {
                if($i % 2)
                    echo "<div class='$w' id='{$x}{$y}'></div>";
                else
                    echo "<div class='$b' id='{$x}{$y}'></div>";    
                $i++;

            }
            echo "<br clear='all' /> \n";
            $i++; //offset color for next row   
        }            
    }
}

问题

虽然这个类完成了显示网格的工作,但问题是坐标不是我需要它们的方式。由于HTML的呈现方式,坐标以下列方式输出(将每个括号想象为div在屏幕上的位置):

note: [x coord, y coord]

[1,1] [2,1] [3,1] 
[1,2] [2,2] [3,2] 
[1,3] [2,3] [3,3]

我实际上需要这个'反向',所以它从左下角开始,坐标类似于典型网格的坐标,即:

[1,3] [2,3] [3,3] 
[1,2] [2,2] [3,2] 
[1,1] [2,1] [3,1]

我确信有很多方法可以解决这个问题,所以答案将是最优雅的解决方案,而不是最快的解决方案。谢谢!

3 个答案:

答案 0 :(得分:3)

我认为这就像改为:

一样简单
 for($y=8; $y>=1; $y--)

答案 1 :(得分:1)

class Grid
{
    function __construct()
    {
        $i = 0;
        $w = 'white';
        $b = 'black';
        for($y=8; $y>0; $y--)
        {
            for($x=1; $x<=8; $x++)
            {
                if($i % 2)
                    echo "<div class='$w' id='{$x}{$y}'></div>";
                else
                    echo "<div class='$b' id='{$x}{$y}'></div>";    
                $i++;

            }
            echo "<br clear='all' /> \n";
            $i++; //offset color for next row   
        }            
    }
}

你完成了

答案 2 :(得分:0)

正在寻找一些关于PHP中的网格构建的代码,使用了你的  代码并改变了......

  

class Grid {       function __construct()       {           $ i = 0;           $ w ='白色';           $ b ='黑色';           $ y = 1; //网格大小Y.           $ y_max = 10;           $ x_max = 10;

    while($y <= $y_max){
        $x      = 1; //grid size X 
        while($x <= $x_max){
            $color = ($i % 2 ? $w : $b);

            echo "<div class='".$color."' id='{$x}{$y}'> $x , $y </div>";

            $i++;
            $x++;
        }
        echo "<br clear='all' /> \n";
        $i++; //offset color for next row   
        $y++;
    }            
  } 
     

}

对于格式化,我将在稍后修复格式。