0

我在尝试弄清楚如何按如下顺序获取数据时遇到了麻烦。总数无关紧要;它会按照 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'),
); 

我这样做是因为我无法弄清楚循环模式;如果我能弄清楚我不需要手动输入数据,并且可以按照这种模式创建一个可以选择任何数字的表格。

4

3 回答 3

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);
}

键盘

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

于 2012-04-18T05:14:41.713 回答
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);
于 2012-04-18T05:27:40.253 回答
0

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

算法

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
于 2012-04-18T05:15:44.627 回答