计数一个数组php

| 我有以下数据:
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之内的会以其他颜色突出显示。抱歉,信息不全     
已邀请:
        虽然这个问题的措词很差,但我想我理解您的要求。这是您应该做的。我不太会说php,所以请确保您查看我编写的代码段,而不是复制/粘贴它们。 找到最大的X和Y值。 根据这些值除以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专业人士,并且实际上才刚开始使用它,但这应该是一个好的开始。     
        好的,我想我已经解决了这个问题(请参阅上面问题的评论)。 我要做的方法是将X和Y位置除以50,然后使用
floor()
函数从中获取一个整数值。这将是他们要进入的邮箱号码。 然后,您可以非常轻松地将其填充到数组中。 以下代码将生成您需要的数组:
$map = array();
foreach($data as $row) {
    $map[floor($row[\'x\']/50)][floor($row[\'y\']/50)]++;
}
然后,您可以将其打印到表格中(行和列标题是单元格编号乘以50)。 您可能需要预先对
$map
数组进行零填充,以便在没有任何匹配的单元格中获得零,或者可以在打印时解决此问题。由你决定)     
        框的坐标为:
$x_coor = floor ($a / 50);
$y_coor = floor ($b / 50);
有了坐标,您可以使它们充满一个n维数组     
        您想寻找一个空间填充曲线。 sfc通常用于热图,并将2d复杂度降低到1d复杂度。您想寻找Nick \'s的希尔伯特曲线空间四叉树博客。     
        首先,您需要用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]++;
}
    

要回复问题请先登录注册