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版です。これがあなたの要件を満たすことを願っています。配列の最初の行に 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
于 2012-04-18T05:15:44.627 に答える