创建一个N×N整数数组,“阶梯”和“环绕”

时间:2012-04-18 05:00:26

标签: php arrays multidimensional-array for-loop

我无法弄清楚如何按如下方式获取数据。总数无关紧要;它将遵循0,1,2,3,4,5,6等逻辑顺序中任何数字的相同模式。所以基本上,从0,2,3,4等开始,其中1将被放置之后的最大数字,其中0可以是我静态设置的变量。我遇到的问题是一直到最大数字然后继续,例如

..., 97, 98, 99, 100, 1, 2, ...

然后按顺序进行,

..., 98, 99, 100, 1, 2, 3, ...

依此类推,直到1,2,3,4,5,6 ......

并将其全部存储到下面的多维数组中。

$set = array(
    array('0','0','0','0','0','0','0','0','0','0','0'),
    array('0','2','3','4','5','6','7','8','9','10','1'),
    array('0','3','4','5','6','7','8','9','10','1','2'),
    array('0','4','5','6','7','8','9','10','1','2','3'),
    array('0','5','6','7','8','9','10','1','2','3','4'),
    array('0','6','7','8','9','10','1','2','3','4','5'),
    array('0','7','8','9','10','1','2','3','4','5','6'),
    array('0','8','9','10','1','2','3','4','5','6','7'),
    array('0','9','10','1','2','3','4','5','6','7','8'),
    array('0','10','1','2','3','4','5','6','7','8','9'),
    array('0','1','2','3','4','5','6','7','8','9','10'),
); 

我做了以上所述,因为我无法弄清楚循环模式;如果我能想到这一点,我不需要手动输入数据,并可以创建一个表格,通过该表格可以选择任何数字,遵循这种模式。

3 个答案:

答案 0 :(得分:2)

请注意,除了第一行和第一列之外,每行只是上一次向左移动,并添加了下一个值:

$max = 10;

// First row (full of 0)
$set = array(array_fill(0, $max + 1, 0));

$row = array();
for($i = 1; $i <= $max; $i++)
    $row[] = $i;
$row[] = 1; // $row  = [2,3,4,...,$max,1]

for($i = 0; $i < $max; $i++){
    $set[] = array_merge(array(0), $row);
    $row = array_map(function($x) use ($max){ // Requires PHP 5.3
        $result = ($x + 1) % $max;
        return 0 === $result ? $max : $result;
    }, $row);
}

Codepad

如果你需要的话,使这个商店字符串而不是整数当然是相当简单的。

答案 1 :(得分:1)

$array = array();
$max = 10;
for ($i = 0; $i < $max; $i++)
{
    $num = $i + 2;
    $array[$i][] = 0;
    for ($j = 0; $j < $max; $j++)
    {
        if ($num == $max + 1)
            $num = 1;
        $array[$i][] = $num;
        $num++;
    }
}
var_dump($array);

答案 2 :(得分:0)

请试试这个..这是Java版本。希望这符合您的要求。您可能需要将ZERO设置为数组的第一行。

算法

int max = 12;
int[][] array = new int[max + 1][max + 1];
int counter = 0;
for(int i = 0; i < max + 1 ; i ++)
{
    array[i][0] = 0;
    counter = i+1;
    for(int j = 1 ; j < max + 1 ; j++)
    {
        int value ;
        if(counter <= max)
            value = max - ( max - counter );
        else
            value = counter - max;
        counter++;
        array[i][j] = value;
        System.out.print(" " + array[i][j]);
    }

    System.out.println("");
}

输出

1 2 3 4 5 6 7 8 9 10 11 12
 2 3 4 5 6 7 8 9 10 11 12 1
 3 4 5 6 7 8 9 10 11 12 1 2
 4 5 6 7 8 9 10 11 12 1 2 3
 5 6 7 8 9 10 11 12 1 2 3 4
 6 7 8 9 10 11 12 1 2 3 4 5
 7 8 9 10 11 12 1 2 3 4 5 6
 8 9 10 11 12 1 2 3 4 5 6 7
 9 10 11 12 1 2 3 4 5 6 7 8
 10 11 12 1 2 3 4 5 6 7 8 9
 11 12 1 2 3 4 5 6 7 8 9 10
 12 1 2 3 4 5 6 7 8 9 10 11
 1 2 3 4 5 6 7 8 9 10 11 12