CodeIgniter中的棘手联想数组

时间:2011-09-30 16:57:40

标签: php codeigniter associative-array

我正在尝试为提交数据的移动设备制作条形图。每一分钟,每个移动设备都会向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:我需要将数据库调用保持在最低限度,因为有些表包含数十万个值。

2 个答案:

答案 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)
            );