Re: PHP bug within multi. dimensional arrays?

From: Date: Mon, 06 Jun 2005 15:10:20 +0000
Subject: Re: PHP bug within multi. dimensional arrays?
References: 1 2  Groups: php.general 
Request: Send a blank email to php-general+get-216491@lists.php.net to get a copy of this message
Matthew Weier O'Phinney wrote:
* Merlin <news.groups@web.de>:
Hi there, I am outputting an multidim. array. That works fine, except one thing. The first letter of the value inside dimension 1 always gets printed. For example: I fill the arrays: while ($row = mysql_fetch_object($result)){ $cat[$row->main_id][name] = $row->main_name; $cat[$row->main_id][$row->sub_id][name] = $row->sub_name; }
First off, if you're creating associative arrays, you should quote the keys:
    $cat[$row->main_id]['name'] = $row->main_name;
If you don't do so, PHP assumes you're using a constant value for the key name.
Then I output them: foreach ($cat AS $maincat){ echo $maincat[name].':';
Quote your keys!
foreach($maincat AS $subcat){
You do realize that the above will also loop over the index 'name', right?...
echo $subcat[name].$br;
and since it does, the first element in that array is 'name', which isn't an array, but a string. Since the 'name' constant isn't defined, it will interpret that as 'true', or 1, and so it takes the first character of that string.
} echo $br; } Which does result in: Europe:E Germany UK North America:N US CA As you can see I get the extra letters N and E. Is this an php error or did I do something wrong?
So, what you should probably do is create an additional layer in your multi-dimensional array for the subcategories, and have it of the form sub_id => sub_name: $cat[$row->main_id]['subs'][$row->sub_id] = $row->sub_name; Then loop over that:
    foreach ($cat as $main_cat) {
        echo $maincat['name'] . ":\n";
        foreach ($maincat['subs'] as $sub_id => $sub_name) {
            echo "$sub_name$br"; // could also use $sub_id here if
                                 // desired
        }
    }
This is very helpful and does work. However I did not understand it completley. What if I want to add another value, for example name2 or name3. It looks like this example is limited to id and name. Could I just add: $cat[$row->main_id]['subs'][$row->sub_id] = $row->name2; Guess not. Can you tell me how to add other fields to the array? Thank you in advance, Merlin

« previous php.general (#216491) next »