-4

私はこのような配列を持っています:

array(8) {
  ["2013-01-02"]  =>  27.62,
  ["2013-01-03"]  =>  27.25,
  ["2013-01-04"]  =>  26.74,
  ["2013-01-07"]  =>  26.69,
  ["2013-01-08"]  =>  26.55,
  ["2013-01-09"]  =>  26.70,
  ["2013-01-10"]  =>  26.46,
  ["2013-01-11"]  =>  26.83
}

そして、すべてのバリエーションを n で見つけたいと思います。

たとえば、n=3 の結果:

array(6) {  
  array(3) {
    ["2013-01-02"]  =>  27.62,
    ["2013-01-03"]  =>  27.25,
    ["2013-01-04"]  =>  26.74    
  }
  array(3) {
    ["2013-01-03"]  =>  27.25,
    ["2013-01-04"]  =>  26.74,
    ["2013-01-07"]  =>  26.69
  }
  array(3) {
    ["2013-01-04"]  =>  26.74,
    ["2013-01-07"]  =>  26.69,
    ["2013-01-08"]  =>  26.55
  }
  array(3) {
    ["2013-01-07"]  =>  26.69,
    ["2013-01-08"]  =>  26.55,
    ["2013-01-09"]  =>  26.70
  }
  array(3) {
    ["2013-01-08"]  =>  26.55,
    ["2013-01-09"]  =>  26.70,
    ["2013-01-10"]  =>  26.46
  }
  array(3) {
    ["2013-01-09"]  =>  26.70,
    ["2013-01-10"]  =>  26.46,
    ["2013-01-11"]  =>  26.83
  }
}

PHPでこれを簡単に行うにはどうすればよいですか?

それだけですが、これなしでは提出できません: コンピューター サイエンスでは、連想配列、マップ、または辞書は、(キー、値) ペアのコレクションで構成される抽象データ型であり、考えられる各キーは多くても出現しません。一度コレクションに。

4

1 に答える 1

0

array_slice()古い配列を取得し、次のように へのさまざまな呼び出しを使用して新しい配列を構築します。

$new_array = array();
$n = 3;
$size = count( $old_array) - $n; // Assumes you have at least $n elements, should check for this
for( $i = 0; $i <= $size; $i++) {
    $new_array[] = array_slice( $old_array, $i, $n);
}

print_r( $new_array);得られます:

Array
(
    [0] => Array
        (
            [2013-01-02] => 27.62
            [2013-01-03] => 27.25
            [2013-01-04] => 26.74
        )

    [1] => Array
        (
            [2013-01-03] => 27.25
            [2013-01-04] => 26.74
            [2013-01-07] => 26.69
        )

    [2] => Array
        (
            [2013-01-04] => 26.74
            [2013-01-07] => 26.69
            [2013-01-08] => 26.55
        )

    [3] => Array
        (
            [2013-01-07] => 26.69
            [2013-01-08] => 26.55
            [2013-01-09] => 26.7
        )

    [4] => Array
        (
            [2013-01-08] => 26.55
            [2013-01-09] => 26.7
            [2013-01-10] => 26.46
        )

    [5] => Array
        (
            [2013-01-09] => 26.7
            [2013-01-10] => 26.46
            [2013-01-11] => 26.83
        )

)
于 2013-02-07T19:33:42.313 に答える