所以我正在研究如何制作一个棋盘格,但里面有一个螺旋,而不是像这样制作的默认棋盘格:

$checkerboard=array();
    for($row=0;$row<10;$row++){
    if($row%2==0){
        for($col=0;$col<10;$col++){
            if($col%2==0){
                $checkerboard[$row][$col]="white";
            }else{
                $checkerboard[$row][$col]="black";
            }
        }
    }else{
        for($col=0;$col<10;$col++){
            if($col%2==0){
                $checkerboard[$row][$col]="black";
            }else{
                $checkerboard[$row][$col]="white";
            }
        }
    }
}

我也用这样的 2 条对角线尝试过:
$diagonal=array();
    for($row=0;$row<10;$row++){
        for($col=0;$col<10;$col++){
            if($row==$col){
                $diagonal[$row][$col]='black';
            }else{
                $diagonal[$row][$col]='white';
            }
            if($row+$col==9){
                $diagonal[$row][$col]='black';
            }
        }
    }

然后 echo 就像这样:
echo "<table>";
for($row=0;$row<count($checkerboard);$row++){
    echo "<tr>";
        for($col=0;$col<count($checkerboard);$col++){
            echo "<td width='50px' height='50px' bgcolor='".$checkerboard[$row][$col]."'></td>";
        }
    echo "</tr>";
}

我想保持代码简单,因为我已经很长时间没有编写 php 代码了,而且它必须使用数组。

我在这里尝试过:
$spiral=array();
    for($row=0;$row<10;$row++){
        for($col=0;$col<10;$col++){
            $spiral[$row][$col]='white';
            if($row==0 or $row==9 or $col==0 or $col==9){
                $spiral[$row][$col]='black';
            }if($row==1 and $col==0){
                $spiral[$row][$col]='white';
            }if($row==2 and $col<8){
                $spiral[$row][$col]='black';
            }if($row>1 and $row<8 and $col==7){
                $spiral[$row][$col]='black';
            }if($row==7 and $col>1 and $col<8){
                $spiral[$row][$col]='black';
            }if($row>3 and $row<7 and $col==2){
                $spiral[$row][$col]='black';
            }if($row==4 and $col>2 and $col<6){
                $spiral[$row][$col]='black';
            }if($row==5 and $col==5){
                $spiral[$row][$col]='black';
            }
        }
    }

但如果棋盘变大,就很难改变了。有没有办法让它更容易?

最佳答案

试试这个:

我创建了一个空板,然后开始绘制水平和垂直线,每次都从边缘开始。代码可能需要一些调整,但这是一个好的开始

$checkerboard=array();

$size = 12;

for ($row=0; $row<$size; $row++) {
    for ($col=0; $col<$size; $col++) {
        $checkerboard[$row][$col]="red";
    }
}

//horizontal
$pair = 0 ;
while ($pair < (int) $size / 2) {
    //drawing top half rows
    $row = 2 * $pair;
    $end = min($row, $size - $row);
    $start = $end - 2;
    for ($col = $start; ($col < $size - $end) && ($row < $size / 2); $col++){
        $checkerboard[$row][$col]="black";
    }
    //drawing bottom half rows
    $far_row = $size - 1 - 2 * $pair;
    $end = min($far_row, $size - $far_row) + 1 - 2;
    $start = $end ;
    for ($col = $start; ($col < $size - $end) && ($far_row > $size / 2 ); $col++){
        $checkerboard[$far_row][$col]="black";
    }
    $pair++;
}

$pair = 0;
//vertical
while ($pair < (int) $size / 2)  {
    //drawing left half columns
    $col = 2 * $pair;
    $end = min($col, $size - $col);
    $start = $end +2 ;
    for ($row = $start; ($row < $size - $end) && ($col < $size / 2); $row++){
        $checkerboard[$row][$col]="black";
    }
    //drawing right half columns
    $far_columns = $size - 1 - 2 * $pair;
    $end = min($far_columns, $size - $far_columns) - 1;
    $start = $end ;
    for ($row = $start; ($row < $size - $end) && ($far_columns  >= ($size / 2 ) ); $row++){
        $checkerboard[$row][$far_columns]="black";
    }
    $pair++;
}


echo "<table>";
for($row=0;$row< $size;$row++){
    echo "<tr>";
        for($col=0; $col< $size; $col++){
            echo "<td width='50px' height='50px' bgcolor='".$checkerboard[$row][$col]."'></td>";
        }
    echo "</tr>";
}

您可以更改不同维度的 $size 变量

关于带阵列的 PHP 棋盘螺旋显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27289498/

10-13 00:55