0

わかりましたので、まずこれが私のコードです:

<table border="1" style="text-align:center;" width="400px;" height="400px;">

 <?php

    $table = range(1, 9);
    shuffle($table);

    for($i=0; $i<9; $i++){

        echo '<tr id="r'.$i.'">';

        for ($j=0; $j<9 ; $j++) { 
            echo '  <td id="r'.$i.'d'.$j.'">'.$table[$j].'</td>';
        }

        echo '</tr>';
    }

?>

</table>

私がやりたいのは、各行と列に 1 ~ 9 の一意の値を持つ 9x9 の正方形を作成することだけです。しかし、コードを実行すると、行ではなく列の乱数が表示されます。ブロック全体に1から9までの乱数が必要です。

私を助けてください...

4

5 に答える 5

0

これがあなたに必要かどうかわかりません

このコードを見てください..

    <table border="1" style="text-align:center;" width="400px;" height="400px;">

 <?php

    $table = range(1, 9);
    shuffle($table);

    for($i=0; $i<9; $i++){

        echo '<tr id="r'.$i.'">';
         shuffle($table);

        for ($j=0; $j<9 ; $j++) { 
            echo '  <td id="r'.$i.'d'.$j.'">'.$table[$j].'</td>';
        }

        echo '</tr>';
    }

?>

</table>
于 2013-02-13T15:51:26.583 に答える
0

shuffle最初のforループ内で呼び出します。シャッフルするのは 1 回だけなので、同じ行を何度も繰り返すだけです。

 <?php

    $table = range(1, 9);

    for($i=0; $i<9; $i++){
        shuffle($table);
        echo '<tr id="r'.$i.'">';

        for ($j=0; $j<9 ; $j++) { 
            echo '  <td id="r'.$i.'d'.$j.'">'.$table[$j].'</td>';
        }

        echo '</tr>';
    }

?>
于 2013-02-13T15:44:16.393 に答える
0

配列$tableは実際にはループ内で変更されません。これが問題です。shuffle($table)最初のループ ( ) 内で実行する必要がありますfor($i=0; $i<9; $i++)

于 2013-02-13T15:44:53.253 に答える
0

行と列の両方で一意の値が必要な場合は、このリンクをご覧ください

そのコードを使用するか、以下のように生成関数を再利用できます。

<table border="1" style="text-align:center;" width="400px;" height="400px;">

$grid = generate();
foreach ($grid as $i => $row){
    echo '<tr id="r'.$i.'">';
    foreach ($row as $j => $cell){
        echo '  <td id="r'.$i.'d'.$j.'">'. $cell .'</td>';
    }
    echo '</tr>';
}



function generate() {
    $vGrid = $hGrid = array();
    $numbers = range(1,9);      
    for($x = 0; $x < 9; $x++) {
        for($y = 0; $y < 9; $y++) {
            $hGrid[$x] = !isset($hGrid[$x]) ? array() : $hGrid[$x];
            $vGrid[$y] = !isset($vGrid[$y]) ? array() : $vGrid[$y];
            $options = array_diff($numbers,$hGrid[$x],$vGrid[$y]);
            $key = array_rand($options);
            if(!isset($options[$key])) {
                return generate();
            }
            $val = $options[$key];
            $hGrid[$x][$y] = $vGrid[$y][$x] = $val;
        }
    }
    return $hGrid;
}

?>

于 2013-02-13T16:29:12.920 に答える
0

これを試してください: 内部ループの前に $table をシャッフルします

<table border="1" style="text-align:center;" width="400px;" height="400px;">
 <?php
    $table = range(1, 9);
    for($i=0; $i<9; $i++){
        echo '<tr id="r'.$i.'">';
        shuffle($table);
        for ($j=0; $j<9 ; $j++) { 
            echo '  <td id="r'.$i.'d'.$j.'">'.$table[$j].'</td>';
        }
        echo '</tr>';
    }

?>
</table>
于 2013-02-14T07:43:13.620 に答える