I'll take an array over a giant switch-case statement any day.
- The array definition will be more compact and easier to see all at once.
- Defining actions in an array enforces uniformity.
- You can put checks in the code to automatically verify that the array definition is complete. (I.e. verify it contains a definition for every item it should have.) Yes, some tools can do this for certain types of switch statements. Using an array-based check is more portable and more foolproof.
I did this on a horrible switch statement once. Dozens of cases, 80% were nearly identical but the few that weren't were awful to untangle. Once I pulled the case bodies into separate functions, put function pointers into a table, and replaced the switch body with a lookup loop it was much cleaner. The code for the odd cases was eventually pushed out (it was a symptom of bad design). The whole exercise enabled another round of changes that allowed the functions for the case bodies to be collapsed back into the table -- we ended up removing an entire unnecessary layer of indirection and made the design much easier to grok.