Was in der Richtung?
Code:
#include <avr/pgmspace.h>

typedef struct
{
   foo1_t foo1;
   foo2_t foo2;
   ...
} karte_t;


const karte_t karten[] PROGMEM =
{
   { .foo1 = ..., .foo2 = ...},
   { .foo1 = ...},
   ...
}

karte_t k_buf;

void foo (void)
{
   uint8_t i;
   for (i=0; i < sizeof (karten) / sizeof (karte_t); i++)
   {
       memcpy_P (& k_buf, & karten[i], sizeof (karte_t));
   }
}