【问题标题】:Tricky associative arrays in CodeIgniterCodeIgniter 中棘手的关联数组
【发布时间】:2011-09-30 16:57:40
【问题描述】:

我正在尝试为提交数据的移动设备制作条形图。每分钟,每个移动设备都会向 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 数据库循环中填充数组,但不太确定如何最好地做到这一点。有人有什么建议吗?

注意:我需要将数据库调用保持在最低限度,因为有些表包含数十万个值。

【问题讨论】:

    标签: php codeigniter associative-array


    【解决方案1】:

    您不能共享这样的数组键(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]";
    }
    

    【讨论】:

      【解决方案2】:

      如果你像这样重写你的数组的一部分,问题对你来说就容易多了:

              array
                  (
                     1482747555 => array(100,990,074)
                  );
      

      【讨论】:

        猜你喜欢
        • 2016-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多