You are here: Re: [PHP] Re: PHP bug within multi. dimensional arrays? « PHP « IT news, forums, messages
Re: [PHP] Re: PHP bug within multi. dimensional arrays?

Posted by Jochem Maas on 06/07/05 12:57

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.

I think you'll find the 'name' constant evaluates to FALSE, which in turn
casts to zero, which will give you the first element of the given array,
but as you pointed out its a string not an array so you get the first
char (because php allows array-like access to the individual chars in
a string) ... if it had evaluated to TRUE you would be getting the second
char.

the rest of your explaination is spot on.

>
>
>> }
>> 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
> }
> }
>

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация