array_sum does work as documented. It's your dataformat that isn't compatible with array_sum. To make it compatible, you need to transpose the array...but if the array is big, I wouldn't suggest transposing.
Another way would be to use SQL:
SELECT SUM(field1), SUM(field2), SUM(field3) FROM table
but you can only use that if you don't want the individual elements of the query...or you don't mind having a second SQL query.
Another method would be to use loops. Why don't you want to use this method?
Diego