* Merlin <news.groups@xxxxxx> : > Matthew Weier O'Phinney wrote: > > * Merlin <news.groups@xxxxxx> : > > > 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? You should probably do some studying up on multidimensional and/or nested arrays so you can get a better handle on this stuff. If you need to be able to add multiple names for a sub_id, do it as an array: $cat[$row->main_id]['subs'][$row->sub_id][] = $row->name1; $cat[$row->main_id]['subs'][$row->sub_id][] = $row->name2; $cat[$row->main_id]['subs'][$row->sub_id][] = $row->name3; However, this will break your loop above -- you'll need another layer of looping added in: foreach ($cat as $main_cat) { echo $maincat['name'] . ":\n"; foreach ($maincat['subs'] as $sub_id => $names) { foreach ($names as $name) { echo "$name$br"; // could also use $sub_id here if // desired } } } Hope that helps. -- Matthew Weier O'Phinney | WEBSITES: Webmaster and IT Specialist | http://www.garden.org National Gardening Association | http://www.kidsgardening.com 802-863-5251 x156 | http://nationalgardenmonth.org mailto:matthew@xxxxxxxxxx | http://vermontbotanical.org -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php