-5

私は次のデータを持っています:

a  , b , c   , d                 , e  , f
375, 52, 1892, http://example.com, ::1, 1308233412
341, 52, 1892, http://example.com, ::1, 1308233412
422, 52, 1892, http://example.com, ::1, 1308233417
478, 50, 1892, http://example.com, ::1, 1308233418
58, 481, 1892, http://example.com, ::1, 1308233432
69, 481, 1892, http://example.com, ::1, 1308233432
487, 49, 1892, http://example.com, ::1, 1308233432
  • a=位置y
  • b=位置x
  • c =画面解像度(ブラウザ)
  • d=ホスト
  • e = ip
  • f=タイムスタンプ

私がやりたいことは、例えば:

50x50pxのボックスにあるかどうかを確認し、そうである場合は+1を数えます。

だから私は次のようなテーブルを持っているでしょう:

y/x |  0 | 50  | 100  | 150
----+----+-----+------+----
50  | 0  |  1  |   2  |   0
100 | 0  |  0  |   1  |   0
150 | 1  |  0  |   0  |   1
200 | 2  |  2  |   3  |   0
etc.

誰かが私が上記を達成するのを手伝ってくれることを願っています

次のリンクはヒートマップhttp://www.design-code.nl/example/heatmap.phpを作成していますが、ヒートマップが重複しているため、カウントされる配列に緑色のドットを配置したいと思います。 50x50以内で、他の色で強調表示されます。情報不足でごめんなさい

4

5 に答える 5

4

さて、私は質問が何であるかを理解したと思います(上記の質問による私のコメントを参照してください)。

私が行う方法は、X位置とY位置を50で除算し、floor()関数を使用してそこから整数値を取得することです。これは、彼らが入るボックス番号になります。

その後、これを非常に簡単に配列に取り込むことができます。

次のコードは、必要な配列を生成します。

$map = array();
foreach($data as $row) {
    $map[floor($row['x']/50)][floor($row['y']/50)]++;
}

次に、それをテーブルに印刷できます(行と列の見出しはセル番号に50を掛けたものです)。

$mapヒットがないセルでゼロを取得できるように、事前に配列をゼロで埋めることができます。または、印刷時にこれを解決することもできます。君による)

于 2011-06-16T15:10:40.383 に答える
0

この質問の言い回しは不十分ですが、私はあなたが何を求めているのか理解していると思います。これがあなたがすべきことです。私はphpに精通しているわけではないので、コピー/貼り付けするのではなく、私が書いたコードスニペットを確認してください。

  1. XとYの最大値を見つけます。
  2. これらの値を50で割った値に基づいて、2D配列をインスタンス化して初期化します。

たとえば、必要に応じて次のようArray[X][Y]にします。

$myArray = array();
for ($x = 0; $x < $maxX / 50; $x++) {
    $myArray[] = array();
    for ($y = 0; $y < $maxY / 50; $y++) {
        $myArray[$x][] = 0;
    }
}

これにより、2D配列がインスタンス化され、必要に応じてすべて0に初期化されます。

3)配列を反復処理し、エントリごとに、の値を$myArray[$curX/50][$curY/50]1ずつインクリメントします。

foreach ($inputArray as $curRow) $myArray[$curRow[b]/50][$curRow[a]/50] += 1;

繰り返しになりますが、私はphpのプロではなく、実際にPHPを使い始めたばかりですが、これは良いスタートになるはずです。

于 2011-06-16T15:04:08.047 に答える
0

ボックスの座標は次のようになります。

$x_coor = floor ($a / 50);
$y_coor = floor ($b / 50);

座標を使用すると、n次元配列全体を表示できます

于 2011-06-16T15:05:31.563 に答える
0

空間充填曲線を探します。sfcは通常、ヒートマップに使用され、2次元の複雑さを1次元の複雑さに減らします。Nickのヒルベルト曲線空間四分木ブログを探したいと思います。

于 2011-06-16T15:10:12.490 に答える
0

まず、配列を0で埋める必要があります。

$result = array();
for($i=0;$i<2000;$i+=50){
    $result[$i] = array();
    for($j=0;$j<2000;$j+=50){
        $result[$i][$j] = 0;
    }
}

ここで、2000は最大画面幅/高さです。次に、値をカウントします。ここ$aで、配列は次のとおりです。

foreach($a as $v){
    $result[floor($v[0]/50)*50][floor($v[1]/50)*50]++;
}
于 2011-06-16T15:22:47.157 に答える