2011-09-30 74 views
1

我正在嘗試爲提交數據的移動設備製作條形圖。每一個移動設備每分鐘都會向Web服務器發送一個數據包 - 然後將其存儲在MySQL數據庫中。每個移動設備都分配一個IP地址,每個IP地址可以每分鐘多次發送數據(有時多達10個)。下面是一個例子表會是什麼樣子:CodeIgniter中的棘手關聯數組

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

您不能共享這樣的數組密鑰(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]"; 
} 
0

如果你重寫你的陣列是這樣的一部分,問題就變得對你更加容易:

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