Hmm, normally I would expect the row to come first, then the column. This would also enable you to work with "For each X" instead of "For each XY".
A faster solution without a loop would be:
Player carries an instance variable of where is saved in the array. (if elements will be removed from the array at some point, you need to update the positions in those cases, though)
then you could: "Levelup" (Parameters: player.arrayposition, parameter_num, value_to_add)
set array at (player.arrayposition, parameter_num) to array.at(player.arrayposition, parameter_num) + value_to_add
Obviously you need to switch x and y, if you want to use x for columns and y for rows.