With a few simple lines of code, I was able to quickly and easily achieve this, let me show you how.

First, let me explain that I was dealing with over 100,000 users and I did not want to do a straight loop and update. I felt too much processing time and memory would be used for this to work well on a production server that was very active.

Instead, using the array_map() function and a custom function performed this process for me extremely quickly and efficiently.

The above code passes in the $users array to the fix_element() function that I created. The whole thing with the &$this is needed because this is inside a CakePHP controller.

The fix_element() function is called once for each element in the array. I know I know, I said I didn't want to loop through each element, the key to that statement, is that I didn't want to. I'm letting PHP do it, which is a lot faster than a foreach statement.

The function replaces $elem['User']['id'] with $elem['UserSetting']['user_id'], exactly the result I wanted.

My finish product loops through an array of my 10 different user settings and adds my other keys for my UserSetting array and I call a saveAll() with my entire array of users, once for each setting.

I don't remember exactly how long the code took to run, but it saved over 1,000,000 records in under 5 minutes, probably around the 2 or 3 minute range.