byte i = 0;
byte buttonPin = 3;
byte ledPin[] = {8, 9, 10, 11}; // Array of pins; RED, YEL, GRN
unsigned long timer, interval = 1000, light = 1, walk = 2;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  for (int i = 0; i < 4; i++) {
    pinMode (ledPin[i], OUTPUT); // Configure LED pins
    digitalWrite(ledPin[i], LOW); // Turn off all LEDs
  }
  digitalWrite(ledPin[0], HIGH); // red ON
}

void loop() {
  if (millis() - timer > interval * light) { // check light interval
    timer = millis(); // interval has passed, reset timer
    digitalWrite(ledPin[i], LOW); // turn "this" LED off
    i++; // next LED
    if (i > 2) i = 0; // keep the pin numbers in-bounds
    digitalWrite(ledPin[i], HIGH); // turn "next" LED on
  }

  if (!digitalRead(buttonPin)) { // button reads LOW when PRESSED
    for (int i = 0; i < 3; i++) // all color LEDs...
      digitalWrite(ledPin[i], LOW); // ...turn off.
    digitalWrite(ledPin[3], 1); // walk LED on
    delay(interval * walk); // blocking delay to stop all lights.
    digitalWrite(ledPin[3], 0); // walk LED off
  }
}