Посчитай массив php - PullRequest
0 голосов
/ 16 июня 2011

У меня есть следующие данные:

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, будут выделены другим цветом. Извините за плохую информацию

Ответы [ 5 ]

4 голосов
/ 16 июня 2011

Хорошо, я думаю, что я понял, о чем вопрос (см. Мой комментарий к вопросу выше).

Я бы сделал так, чтобы разделить позиции X и Y на 50 и использовать функцию floor() для получения целочисленного значения. Это будет номер коробки, в которой они будут.

Затем вы можете легко заполнить это в массив.

Следующий код создаст нужный вам массив:

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

Затем вы можете просто распечатать его в таблицу (заголовки строк и столбцов будут умножены на номер ячейки 50).

Возможно, вы захотите предварительно заполнить массив $map нулями, чтобы получить нули в ячейках, где у вас нет попаданий, или вы можете решить это при печати; до вас)

0 голосов
/ 16 июня 2011

сначала необходимо заполнить массив полными нулями:

$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]++;
}
0 голосов
/ 16 июня 2011

Координаты поля будут:

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

С координатами вы можете заполнить их n-мерным массивом

0 голосов
/ 16 июня 2011

Вы хотите найти кривую заполнения пространства. SFC обычно используется для тепловых карт и уменьшает сложность 2d до сложности 1d. Вы хотите найти блог Ника Гильберта о кривой пространственного квадри.

0 голосов
/ 16 июня 2011

Хотя этот вопрос сформулирован плохо, я думаю, что понимаю, о чем вы спрашиваете.Вот что ты должен сделать.Я не очень хорошо разбираюсь в php, поэтому, пожалуйста, убедитесь, что вы просматриваете фрагменты кода, которые я пишу, вместо того, чтобы копировать / вставлять их.

  1. Найдите максимальные значения X и Y.
  2. Создание и инициализация 2D-массива на основе этих значений, разделенных на 50.

Например, если вы хотите Array[X][Y], вы должны сделать:

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

Это должно создать экземпляр и инициализировать двумерный массив со всеми 0, как вам нужно

3) Итерация по вашему массиву и для каждой записи увеличьте значение $myArray[$curX/50][$curY/50] на 1:

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

Опять же, я не профессионал в php и действительно только начал работать с ним, но это должно быть хорошим началом.

...