Weird result printing an array using a loop
Constants like String(number_small[0][0]) are optimized by compiler during the build (=compile time).

However that's not the case of loop. So you have to use specific functions for reading values from PROGMEM in the runtime:

for (int i = 0; i&lt;14; i++){
  Serial.print("I: ");
  Serial.print(i);
  Serial.print(" - ");
  Serial.println((int)pgm_read_word(number_small[0]+i));
}


Btw: Don't use string concatenations. These are extremely hungry for the memory. See Majenko's article: The Evils of Arduino Strings