I'm having to make lots of custom plugins to counteract this simple problem: You cannot nest variables, arrays are not associative (which is fine) and limited to three dimensions.
Now onto arrays. If you are making a 2D tiled map, for instance, you can use an 3-dimension array to store information about your tiles: X and Y are normal coordinates, and you use the numbers in Z to store your information, so 0 might be "tile ID", 1 might be "tileset ID", 2 might be "is this an obstacle?", 3 might be "is this animated?" and so on.
When you make a 3D tiled map however, stacking tiles on top of each other (making blocks - as in dwarf fortress or tibia), you need the third dimension to represent an actual coordinate, losing the ability to store values. You then need to create another array, and store a pointer to a position in this other array.
It would be nice if we could add variables of type array into objects instead, and use bracket notation to work with them - thus freeing us to work in more than 3 dimensions.
*For those that don't get this technique, you simple create two arrays - Let's name them "coordinates" and "values".
You use X, Y and Z to refer to coordinates, and since you can only store ONE value, you store a sequential number. Your "values" array is two dimensional. Your X dimension is sequential, and your Y dimension is your values, so 0 might be "tile ID", 1 might be "is this an obstacle?" and so on.
If you want to know the properties of a tile, you check the "values" array at position x=(whatever is stored in the "coordinates" array for that XYZ coordinate) and y=(number of the property you want to know about).