Tu peux récupérer tes options en JS avec document.getElementsByName('options[]').
Et oui tu peux passer un tableau à plusieurs dimentions, PHP est capable de reconstituer les crochets dans le nom d'un champ POST en tableaux et tableaux associatifs imbriqués.
Le problème est que quand tu mets des crochets vides, ça crééera systématiquement un nouvel élément dans le tableau :
article[][article_id] = 1
article[][option_id] = 1
Donnera :
array(
array(
'article_id' => 1,
),
array(
'option_id' => 1,
),
)
Pour attribuer plusieurs offsets à un même élément de tableau, tu n'as pas d'autre choix que de préciser le numéro de l'index, ainsi :
article[0][article_id] = 1
article[0][option_id] = 1
article[1][article_id] = 2
article[1][option_id] = 2