Writing to a specific or new element in a multi-value custom field
You're nearly spot on, the only problem is whatever field array you put in $edit will overwrite the array that's in there now; no merging happens behind the scenes. This is probably the correct behaviour as you should be able to overwrite the field completely if you need to.

At the moment each time you use

$edit['field_key'][LANGUAGE_NONE][]['value'] = $key_save;
user_save($account, $edit);


The field is being re-initialised as whatever's in $edit['field_key'], i.e. a single element.

To append to the array you could do something like this:

$field_items = $account-&gt;field_key;
if (!is_array($field_items)) {
  $field_items = array();
}

$field_items[LANGUAGE_NONE][]['value'] = $key_save;
user_save($account, array('field_key' =&gt; $field_items));