benwestgarth gave a good explaination:
here is an exlaination that helped me understand.. sometime you have to hear the same thing in several different ways before it clicks...
you know what arrays are... arrays store things by numbers array[0]='a', array[1]='b'
0 and 1, they are called indexes, they are unimportant and only hold the order of the item in the array
someone decided that they wanted to use something more descriptive than 0 and one, they called this a hashtable or hash, it is an array that can use strings as well as numbers
array['name'] = 'ednark'
array['country'] = 'usa'
now 'name' and 'country' are called the 'keys' instead of 'indexes'
when you step through and array with foreach() you can ask to be given only the value of the array at each step
foreach ( $array as $value )
{ ... }
good if you are only using unimportant indexes, it will step through in order so you don't need the index
or you can ask for the 'key' and the 'value' at each step
foreach ( $array as $key=>$value )
{ ... }
this is important when you use a meaningful 'key' and you need to know what type of info $value is a 'name' or a 'country' (as in my example above)