Php 计算一个数组
我有以下数据:Php 计算一个数组,php,arrays,positioning,heatmap,Php,Arrays,Positioning,Heatmap,我有以下数据: 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, 1308233
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=时间戳
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.
希望有人能帮我实现以上目标
下面的链接正在创建一个热图,但是热图是重叠的,所以我想把绿色的点放在一个数组中进行计数,那些在50x50范围内的区域将用另一种颜色高亮显示。很抱歉信息不准确虽然这个问题措词不当,但我想我理解你的要求。这是你应该做的。我的php不是很流利,所以请确保查看我编写的代码片段,而不是复制/粘贴它们
Array[X][Y]
,您可以执行以下操作:
$myArray = array();
for ($x = 0; $x < $maxX / 50; $x++) {
$myArray[] = array();
for ($y = 0; $y < $maxY / 50; $y++) {
$myArray[$x][] = 0;
}
}
再说一次,我对php不在行,而且刚刚开始使用它,但这应该是一个好的开始。方框的坐标是:
$x_coor = floor ($a / 50);
$y_coor = floor ($b / 50);
有了这些坐标,您可以将其填充到一个n维数组中。如果要查找空间填充曲线,请执行以下操作。sfc通常用于热图,并将2d复杂度降低到1d复杂度。你想看看Nick的hilbert curve空间四叉树博客。好的,我想我已经解决了这个问题(见我对上面问题的评论) 我的方法是将X和Y位置除以50,然后使用
floor()
函数从中获得一个整数值。这将是他们将在其中的箱号
然后可以很容易地将其填充到数组中
以下代码将生成所需的数组:
$map = array();
foreach($data as $row) {
$map[floor($row['x']/50)][floor($row['y']/50)]++;
}
然后可以将其打印到表中(行标题和列标题是单元格编号乘以50)
您可能希望事先对
$map
数组进行零填充,以便在没有任何命中的单元格中得到零,或者您可以在打印它时计算出来;由您决定)首先,您需要用0填充一个数组:
$result = array();
for($i=0;$i<2000;$i+=50){
$result[$i] = array();
for($j=0;$j<2000;$j+=50){
$result[$i][$j] = 0;
}
}
UH检查50x50框中是否有什么?这个问题真的是关于
计算数组php
?你能再解释一下矩阵吗?这些值的含义是什么?可以符合(x,y)指定尺寸的50x50个盒子的数量?@spudley,例如(375)=盒子(350-400)和(52)=盒子(50-100)@starx数据在一个数组中,所以我想我需要在array@rayrule:好的,我想我明白了。您希望将屏幕划分为50x50个框,用PHP数组表示,然后查看位置x和y字段以确定这些坐标所在的框。这是对你追求的东西的合理描述吗?这个问题很难理解,所以我希望我现在已经理解了。下面的链接是创建一个热图,但是热图是重叠的,所以我想把绿色的点放在一个被计数的数组中,这些区域将用另一种颜色高亮显示。很抱歉信息不好如果你想做的是创建一个热图,你应该先创建一个高度图。您首先要求创建的确实是一个高度贴图,但它将是一个参差不齐的高度贴图。尽管如此,我上面所说的应该考虑到你要求完成的事情。
$result = array();
for($i=0;$i<2000;$i+=50){
$result[$i] = array();
for($j=0;$j<2000;$j+=50){
$result[$i][$j] = 0;
}
}
foreach($a as $v){
$result[floor($v[0]/50)*50][floor($v[1]/50)*50]++;
}