How do i get an array of objects with increasing rotations to stay on a specific axis?
I dont think you can do this with the array modifier or a different modifier. So I made this code:

import bpy 
import math

Count = 10
distance  = [0, 2, 0]

rotationX = 10                              # in degrees
radiansX = rotationX *(math.pi / 180)       # in radians

rotationY = 0
radiansY = rotationY *(math.pi / 180)

rotationZ = 0
radiansZ = rotationZ *(math.pi / 180)

startRotationX = 0
startRotationY = 0
startRotationZ = 0

for x in range (0, Count - 1):
    bpy.ops.object.duplicate_move(OBJECT_OT_duplicate={"linked":False, "mode":'TRANSLATION'}, TRANSFORM_OT_translate={"value":(distance[0], distance[1], distance[2]), "constraint_axis":(False, False, False), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "texture_space":False, "remove_on_cancel":False, "release_confirm":False})

    if x == 0:
        startRotationX = bpy.context.object.rotation_euler[0] 
        startRotationY = bpy.context.object.rotation_euler[1] 
        startRotationZ = bpy.context.object.rotation_euler[2] 

    bpy.context.object.rotation_euler[0] = startRotationX + (radiansX * (x + 1))
    bpy.context.object.rotation_euler[1] = startRotationY + (radiansY * (x + 1))
    bpy.context.object.rotation_euler[2] = startRotationZ + (radiansZ * (x + 1))


I hope this works!