In the example of the hidden field, the value that is transmitted is the last non blank value in source code order. Therefore if the checkbox is not checked what comes through is the value of the hidden field. If the checkbox is checked, then it is last in source code order and will have it's value sent.
You can however use array syntax with any kind of form field.
<input type="checkbox" name="chkname" value="1" />
<input type="text" name="modelnumber" />
Any of those will work, and bring back an array to PHP. In fact if you want to use a multiple select list, you have to use array syntax for the name, in order for PHP to receive all the selected items.
<input type="checkbox" name="favoritefood" value="chicken" />