There's one thing to be wary of. Whatever the HTML 4 spec might say, they are submitted in the order they appear in the DOM.
Have a look at this (invalid) HTML.
<html>
<head>
<title>Test Page</title>
</head>
<body>
<form name="f1" method="get" action="fostered.htm">
<label>A <input type="checkbox" name="a" checked="checked" /></label>
<table>
<tbody>
<tr>
<td>
<label>B <input type="checkbox" name="b" checked="checked" /></label>
</td>
</tr>
<tr>
<label>C <input type="checkbox" name="c" checked="checked" /></label>
</tr>
</tbody>
</table>
<input type="submit" />
</form>
</body>
</html>
In this case, the order on submission is A, C, B because during parsing, the C checkbox is "foster parented" to be before the beginning of the table because it is not inside a table cell.
Of course, this would normally show up on the rendered page, but CSS could mask that.
Another good reason to take the trouble to validate your HTML.
It's also worth noting that "hidden" input fields are not foster parented, so if C had been a hidden field, the order on submission would be A, B, C.