0

次のように設定された値の配列があります。

$array[0]['Year', 'Value']

メイン配列の内部に 100 ほどの配列があり、それぞれに「年」と「値」の値のペアが 30 あります。これは、データを次のようにフォーマットするさまざまなグラフ作成ライブラリに出会うまで、現在のすべてのアプリケーションでうまく機能します。

[x1, y1, y2, y3 ...], [x2, y1, y2, y3 ...], ...

すべてのデータ ポイントが同じ年から開始されている場合、これは簡単ですが、そうではありません。私の配列はすべて異なる年に始まり、重複しています。これに関する問題は、その X ポイントに Y 軸の値がない場合、グラフ ライブラリ形式では、その特定のシリーズのプレースマーカーとして「null」値が必要になることです。

例: 私の $array[0] は 1900 年から 1930 年まで、私の $array[1] は 1901 年から 1931 年までです。そのため、新しい配列は [1900, $array[0]['Value']], null] である必要があります ($array[1] に値がなくても、配列のシリーズであることを示すため)。次に [1901, $array[0]['Value'], $array[1]['Value']] など。

私は図を描いて、古い配列を取得して変換する一連のループを作成することに頭を悩ませようとしています...しかし、途方に暮れています。何か案は?

4

1 に答える 1

0

まず、y ポイントを定義する必要があります。これには範囲が必要です。配列を作成しているとき、私は 2 つの変数を持ち$minYear$maxYear配列へのすべてのエントリについて、それが minYear より小さいか maxYear より大きいかをチェックし、そうであれば値をこれに置き換えます。

これで最小値と最大値が得られたので、今度は範囲が必要です。各年の間に何ポイントあるかを決定する必要があります。簡単にするために、1 年を y 軸の 1 増分と仮定します。ただし、使用できる y 軸上のポイントの最大数がある場合は、次の式を使用して、各ポイント間の年数を計算できます。

$increment = ($maxYear - $minYear) / $numPointsOnYAxis;

これにより、Y 軸上の各ポイント間の年数がわかります。簡単にするために、関数を使用してその数値を丸めることができceil()ます。これは、Y 軸のすべてのポイントを使用するわけではありませんが、計算を簡単かつ適切に行うことを意味します。

これで、 foreach ループを使用してデータを調べてグラフをプロットできる範囲ができました。

$space = '';
foreach($array as $num => $a) {
    echo $space . '[x' . $num;
    foreach($a as $year => $value) {
        $y = ceil(($value - $minValue) / $increment); //Work out how many increments up the scale the year needs to be.
        echo ', y' . $y;
    }
    echo ']';
    $space = ', ';
}

それはあなたが求めているものを反映するはずです。このコードをテストしていないことに注意してください。

于 2013-07-23T15:21:58.270 に答える