我正在尝试为提交数据的移动设备制作条形图。每一分钟,每个移动设备都会向Web服务器发送一个数据包 - 然后将其存储在MySQL数据库中。为每个移动设备分配一个IP地址,每个IP地址可以每分钟多次发送数据(有时多达10个)。这是示例表的样子:
date_received | bytes | IP address
----------------------------------
1314831600 | 100 | 1482747555
1314831600 | 990 | 1482747555
1314831600 | 074 | 1482747555
1314831660 | 420 | 1482747555
1314831660 | 183 | 1482747555
因此,您可以看到一个IP地址可以在一个小时内(因此多分钟)每分钟提交多次。我如何创建一个如下所示的关联数组:
array
(
1314831600 = array
(
1482747555 => 100,
1482747555 => 990,
1482747555 => 074
);
1314831660 = array
(
1482747555 => 420,
1482747555 => 183
);
);
第一个键是date_received值,以及当时发送的IP地址(及其对应的字节值)。我正在使用CodeIgniter,我想在我的foreach数据库循环中填充数组,但不太确定如何最好地执行此操作。有人有什么建议吗?
N.B:我需要将数据库调用保持在最低限度,因为有些表包含数十万个值。
答案 0 :(得分:2)
您不能共享这样的数组键(IP地址),因为它们将被覆盖。你可以这样做:
$packets = array();
while ($row = mysql_fetch_assoc($res)) {
$packets[$row['date_received']][] =
array('ip_address'=>$row['ip_address'],
'bytes'=>$row['bytes']
);
}
然后您可以使用以下内容遍历数据:
foreach ($packets as $date => $info) {
echo "date = $date, ip = $info[ip_address], bytes = $info[bytes]";
}
答案 1 :(得分:0)
如果您像这样重写部分数组,问题会变得更加容易:
array
(
1482747555 => array(100,990,074)
);