|
Posted by Merlin on 06/06/05 18:10
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
Navigation:
[Reply to this message]
|