我正在尝试为Rokudoku(Sudoku的6x6版本)编写代码。
我已经为Rokudoku准备了桌子;这意味着我不必每次都生成Rokudoku表。
这是我的构造函数:
const row = 6, column=6;
public $grid_number;
public $numbers=array();
function __construct()
{
(...some code...)
$this->numbers=array(0, 0, 4, 0, 0, 0,
0, 0, 0, 2, 3, 0,
3, 0, 0, 0, 6, 0,
0, 6, 0, 0, 0, 2,
0, 2, 1, 0, 0, 0,
0, 0, 0, 5, 0, 0);
foreach ($numbers as $element)
for($i = 1; $i < Rokudoku::row+1; $i++)
for($j = 1; $j < Rokudoku::column+1; $j++)
$this->grid_number[$i][$j] = $element;
}
[我的问题是:如何将数组转换为矩阵,以便以后由于我的想法行不通,因此可以以[row] [column]的形式访问每个数字。
例如,数组中的数字4为:grid_number [1] [3]。
抱歉,这是一个小问题。这是初学者的工作。谢谢! :)
我不熟悉Rokudoku,但请考虑以下示例:
$numbers = array(
0, 0, 4, 0, 0, 0,
0, 0, 0, 2, 3, 0,
3, 0, 0, 0, 6, 0,
0, 6, 0, 0, 0, 2,
0, 2, 1, 0, 0, 0,
0, 0, 0, 5, 0, 0);
function getNumber($numbers, $row, $column){
$position = $row * 6 - (6 - $column); // the two 6s are your consts.
return $numbers[$position - 1]; // -1 because arrays count from 0, not 1.
};
$number = getNumber($numbers, 1, 3);
您的数组,即使它像矩阵一样looks也只是一个数字列表,您也可以像[0, 0, 4, 0, 0, 0, 0, 0, 0, 2, 3, 0, 3, 0, 0, 0, 6, 0, 0, 6, 0, 0, 0, 2, 0, 2, 1, 0, 0, 0, 0, 0, 0, 5, 0, 0];
一样写下来。实现这一点时,您可以编写一个简单的函数,就像我对getNumber
所做的那样,即可通过简单的计算找到正确的元素。
您可以看到一个有效的示例here。
嗯,
<?php
$row = $col = 6;
$numbers = [
0, 0, 4, 0, 0, 0,
0, 0, 0, 2, 3, 0,
3, 0, 0, 0, 6, 0,
0, 6, 0, 0, 0, 2,
0, 2, 1, 0, 0, 0,
0, 0, 0, 5, 0, 0
];
$result = [];
for($i = 0; $i < count($numbers); $i++) {
$y = intdiv($i, $col);
$x = $y * $col + ($i % $row) % $row;
$result[$y][$x] = $numbers[$i];
}
print_r($result);