An array is a series of variables that are stored together. So, for example, in a baseball game you could have an array of scores for each team in each inning - say, two arrays of nine integers. So you'd have Team1Score, which is an array, and Team1Score[0] is their score in the 1st inning, Team1Score[1] is their score in the 2nd inning, etc etc. Team2Score[0] would be the other team's score in the 1st, etc.
You
could just have 18 variables - Team1Score1st, Team1Score2nd, etc. But what happens if the game goes to extra innings? You could have more variables defined, but you have a limit - however many you need. You could have 60 variables, 30 innings each; that will probably be enough (record for an MLB game is 26 innings), but now you have 42 variables more than you'll usually need. But when you have an array, you can just refer to Team1Score[9] for the 10th inning, and the code will create a slot for Team1Score[9] the first time you assign something to it (in Oblivion script; some programming languages require preparation of the slot first).
Further, you can refer to an inning with a variable. So instead of something like this to add a run to Team 1:
if ( inning == 1 ) set Team1Score1st to Team1Score1st + 1elseif ( inning == 2 ) set Team1Score2nd to Team1Score2nd + 1etc
You can just do this:
Team1Score[inning] = Team1Score[inning] + 1
This kind of just touching the tip of the iceberg; there's a lot more you can do with arrays. For example, you can have
multidimensional arrays - like a table, perhaps. So you could actually just do Score[0][2] for Team 1's score in the 3rd.
The big thing to remember is that arrays start at 0. It can be easy to forget that.
OBSE arrays can also have things other than numbers as the "key", so you can do something like have an array called NPC, which stores a variety of information about an NPC, and then use NPC[name] to get its name, or NPC[lastSpokeTo] to get the time when you last spoke to them. Or whatever, it's up to you to define how they're used.