can or should this sketch be converted into an array

hello all i have taken this sketch suggested to me on another forum and expanded it to control 3 systems on my future aquarium system.

should i do some rewriting to make it into an array to save some lines of code or leave it alone and use it as is.

i am a noob but improving at writing code with a lot of help from here, other forums and a lot of reading.

byte sumplowWaterPin = 28;
byte atolowWaterPin = 29;
byte wclowWaterPin = 30;

byte sumphighWaterPin = 31;
byte atohighWaterPin = 32;
byte wchighWaterPin = 33;

byte sumppumpPin = 35;
byte atopumpPin = 36;
byte wcpumpPin = 37;


unsigned long maxsumpRunTime = 1000;
unsigned long maxatoRunTime = 1000;
unsigned long maxwcRunTime = 1000;

unsigned long minsumpOffTime = 1000;
unsigned long minatoOffTime = 1000;
unsigned long minwcOffTime = 1000;

unsigned long sumpswitchDebounceTime = 50;
unsigned long atoswitchDebounceTime = 50;
unsigned long wcswitchDebounceTime = 50;

unsigned long lastsumpPumpTime = 0;
unsigned long lastatoPumpTime = 0;
unsigned long lastwcPumpTime = 0;

unsigned long lastsumplowWaterDetectTime = 0;
unsigned long lastatolowWaterDetectTime = 0;
unsigned long lastwclowWaterDetectTime = 0;

boolean lastlowsumpWaterState = HIGH;
boolean lastlowatoWaterState = HIGH;
boolean lastlowwcWaterState = HIGH;

boolean sumppumpRunning = true;
boolean atopumpRunning = true;
boolean wcpumpRunning = true;

void setup() { 

  Serial.begin (115200); 

  pinMode (sumplowWaterPin, INPUT_PULLUP);
  pinMode (atolowWaterPin, INPUT_PULLUP);
  pinMode (wclowWaterPin, INPUT_PULLUP);

  pinMode (sumphighWaterPin, INPUT_PULLUP);
  pinMode (atohighWaterPin, INPUT_PULLUP);
  pinMode (wchighWaterPin, INPUT_PULLUP);

  pinMode (sumppumpPin, OUTPUT);
  pinMode (atopumpPin, OUTPUT);
  pinMode (wcpumpPin, OUTPUT);

}


void loop () {
  unsigned long currentMillis = millis();

  boolean lowsumpWaterState = digitalRead(sumplowWaterPin);
  boolean highsumpWaterState = digitalRead(sumphighWaterPin);

  if(lowsumpWaterState != lastlowsumpWaterState){
    lastsumplowWaterDetectTime = currentMillis;
  }


  if (sumppumpRunning) {  // if the pump is on then let's see if we should turn it off yet

    if ((highsumpWaterState == HIGH) || (currentMillis - lastsumpPumpTime >= maxsumpRunTime)){
      digitalWrite(sumppumpPin, LOW);
      sumppumpRunning = false;
      lastsumpPumpTime = currentMillis;
    }
  }
  else {   // pump is not running, see if we need to turn it on

    if((lowsumpWaterState == HIGH)  &&  (currentMillis - lastsumplowWaterDetectTime >= sumpswitchDebounceTime) && (currentMillis - lastsumpPumpTime > minsumpOffTime)){   // switch is low and has been for at least 3 seconds
      digitalWrite(sumppumpPin, HIGH);
      sumppumpRunning = true;
      lastsumpPumpTime = currentMillis;
    }
  }

  lastlowsumpWaterState = lowsumpWaterState;


  boolean lowatoWaterState = digitalRead(atolowWaterPin);
  boolean highatoWaterState = digitalRead(atohighWaterPin);

  if(lowatoWaterState != lastlowatoWaterState){
    lastatolowWaterDetectTime = currentMillis;
  }


  if (atopumpRunning) {  // if the pump is on then let's see if we should turn it off yet

    if ((highatoWaterState == HIGH) || (currentMillis - lastatoPumpTime >= maxatoRunTime)){
      digitalWrite(atopumpPin, LOW);
      atopumpRunning = false;
      lastatoPumpTime = currentMillis;
    }
  }
  else {   // pump is not running, see if we need to turn it on

    if((lowatoWaterState == HIGH)  &&  (currentMillis - lastatolowWaterDetectTime >= atoswitchDebounceTime) && (currentMillis - lastatoPumpTime > minatoOffTime)){   // switch is low and has been for at least 3 seconds
      digitalWrite(atopumpPin, HIGH);
      atopumpRunning = true;
      lastatoPumpTime = currentMillis;
    }
  }

  lastlowatoWaterState = lowatoWaterState;


  boolean lowwcWaterState = digitalRead(wclowWaterPin);
  boolean highwcWaterState = digitalRead(wchighWaterPin);

  if(lowwcWaterState != lastlowwcWaterState){
    lastwclowWaterDetectTime = currentMillis;
  }


  if (wcpumpRunning) {  // if the pump is on then let's see if we should turn it off yet

    if ((highwcWaterState == HIGH) || (currentMillis - lastwcPumpTime >= maxwcRunTime)){
      digitalWrite(wcpumpPin, LOW);
      wcpumpRunning = false;
      lastwcPumpTime = currentMillis;
    }
  }
  else {   // pump is not running, see if we need to turn it on

    if((lowwcWaterState == HIGH)  &&  (currentMillis - lastwclowWaterDetectTime >= wcswitchDebounceTime) && (currentMillis - lastwcPumpTime > minwcOffTime)){   // switch is low and has been for at least 3 seconds
      digitalWrite(wcpumpPin, HIGH);
      wcpumpRunning = true;
      lastwcPumpTime = currentMillis;
    }
  }

  lastlowwcWaterState = lowwcWaterState;

}

If it works and you don't need the memory space leave it as is. Should you, it's up to you.

Sometimes it's faster if you omit a loop and do as you have. For practice, I would use arrays for learning purposes if nothing else. For readability arrays and a loop can make sense.

This is a good read, may not answer your question though (see page 13) http://www.atmel.ca/Images/doc8453.pdf