hohner
hohner

Reputation: 11588

Tricky associative arrays in CodeIgniter

I'm trying to make a bar chart for a mobile devices that submit data. Every minute, each mobile device sends a packet of data to the web server - where it's then stored in a MySQL database. Each mobile device is assigned an IP addresses, and each IP address can send data multiple times a minute (sometimes as many as 10). Here is what an example table would look like:

date_received | bytes | IP address
----------------------------------
1314831600    | 100   | 1482747555
1314831600    | 990   | 1482747555
1314831600    | 074   | 1482747555
1314831660    | 420   | 1482747555
1314831660    | 183   | 1482747555

So you can see that one IP address can submit multiple times a minute over a span of hours (therefore multiple minutes). How would I create an associative array that looked like this:

array
(
   1314831600 = array
                (
                   1482747555 => 100,
                   1482747555 => 990,
                   1482747555 => 074
                );
   1314831660 = array
                (
                   1482747555 => 420,
                   1482747555 => 183
                );
);

The first key would be the date_received value, and the the IP addresses which are sent for that time (with their corresponding bytes values). I'm using CodeIgniter and I thought about populating arrays in my foreach database loop, but wasn't quite sure how best to do this. Does anybody have any advice?

N.B: I need to keep database calls to a minimum because some tables contain hundreds of thousands of values.

Upvotes: 1

Views: 1073

Answers (2)

Chris G.
Chris G.

Reputation: 3981

If you rewrite part of your array like this, the problem becomes much easier for you:

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

Upvotes: 0

webbiedave
webbiedave

Reputation: 48887

You cannot share array keys like that (ip address) as they will be overwritten. You can do something like:

$packets = array();
while ($row = mysql_fetch_assoc($res)) {
    $packets[$row['date_received']][] = 
        array('ip_address'=>$row['ip_address'], 
        'bytes'=>$row['bytes']
    );
}

Then you can loop through the data with:

foreach ($packets as $date => $info) {
    echo "date = $date, ip = $info[ip_address], bytes = $info[bytes]";
}

Upvotes: 2

Related Questions