I an using answer[] to capture the status of the checkboxes but they only add to the array when set to "on" status. I need every value in the array with its on / off status so I can save the answer against the specific question. For example if someone saved the form without checking any checkbox, the answer array would contain 14 values of "off" (as that is currently the amount of questions), or if they just check question 3 then answer[2] would be set to "on";
but they only add to the array when set to "on" status.
This is simply how checkboxes work. You only receive what is checked. There are quite some questions around this topic on this forum and on google. You should be able to find several solutions there.
In short, there are a few options:
"Sync" the data when you receive the data on the server. Depending on your models and relationships you could use the sync() method for this. This removes all existing relationships, adds new relationships and leaves existing untouched.
Do not use checkboxes. You can use radiobuttons with yes/no values.
Create a fake checkbox that actually sets the value of a hidden radiobutton to yes/no. This way it looks like a checkbox but you receive yes/no values on your server