I want to add a Millis timer in place of a for loop

The standard blink without delay-example code makes it unnescessary complicated to understand non-blocking timing.

The main reason is that this example and other tutorials do not focus on the fundamental difference how non-blocking timing works.

You should learn the principle prior to looking into the code.
Knowing the basic principle will make it much easier to understand the code

I recommend a version that puts the details about non-blocking timing into a function
that can be used in a single if-condition that says what the function is doing

checking if TimePeriodIsOver()

if( TimePeriodIsOver(myTimingVariable,Period)  ) {
  // do timed action
}

best regards Stefan