user849137
user849137

Reputation:

How to create a multidimensional array with an identifying column value used as the first level key?

I have some data for my sites statistics in a SQL DB:

date:          visits:        pageviews:
12-12-12       34             21
12-12-13       31             22
12-12-14       33             2445
12-12-15       35             2422
12-12-16       36             232

//ect ect

I'm trying to create a Multidimensional array that contains all the dates info from the DB and where the date will be the key (selector,name of the array inside the multi array), so as the end result, I should be able to just do this:

print_r $my_multi_array[12-05-12];

And I should see the statistics for that date on the screen.

Now I know how to do all the loops and stuff, and I even have a good idea about how to do multidimensional arrays, it's just that I think I'm doing something wrong:

//first things first, define the array:
$my_multi_array = array();

//then, in a loop, append to the array:
$my_multi_array[] = array(
    "$date" => array(
        'visits' = >mysql_num_rows($visit_query),
        'pageviews' => $pageview_query
    )
);

Now when I print_r that array, everything looks good:

Array (
    [0] => Array (
        [11-12-24] => Array (
            [visits] => 1
            [pageviews] => 0
        )
    )
    [1] => Array (
        [11-12-25] => Array (
            [visits] => 1
            [pageviews] => 0
        )
    )
    [2] => Array (
        [11-12-26] => Array (
            [visits] => 1
            [pageviews] => 0
        )
    )
)1

Notice the 1 at the end ^^. That seemed to be in the result (not a typo).

Now when I try printing a certain array out (using the date as the key):

print_r $my_multi_array['11-12-24'];

I get:

1

So then I try:

print_r $my_multi_array[2];

and that works fine.

For some reason, it won't let me select an array from $my_multi_array using the date as the key.

Any ideas on how to fix this?

Upvotes: 2

Views: 10747

Answers (2)

Mr. BeatMasta
Mr. BeatMasta

Reputation: 1312

Everything is correct, because you don't have array('key' => 'value') style array, instead of that you've got array( [0] => array( 'key' => 'value' ) ) that's why you're getting correct result on accessing numeric key of the array.

Upvotes: 1

Telmo Marques
Telmo Marques

Reputation: 5106

You have to put the date as the array key, like so:

$my_multi_array[$date]=array("$date"=>array('visits'=>mysql_num_rows($visit_query),'pageviews'=>$pageview_query));

Notice the $my_multi_array[$date].

By doing $my_multi_array[] = ... you are just creating a new numerical index on the array with the content on the right side. That's why when you access the array with the numerical index, like $my_multi_array[2], it works.

On the other hand, by doing $my_multi_array[$date]you are treating the array like an hash table, where you associate a key (in this case a string containing a date) with a value.

Upvotes: 2

Related Questions