将数组转换为php中的矩阵

问题描述 投票:0回答:1

我正在尝试为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]。

抱歉,这是一个小问题。这是初学者的工作。谢谢! :)

php arrays matrix
1个回答
0
投票

我不熟悉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


0
投票

嗯,

<?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);
© www.soinside.com 2019 - 2024. All rights reserved.