Czyli jesli dobrze rozumiem, jezeli bedziesz mial 20 pol z danymi to bedzie 20 rekordow o ID 1 ?
Hahahahahahaha powodzenia...
Jezeli nie chcesz robic "alterowania" to zrob sobie 2 dodatkowe pola w swojej tabeli, definicja i wartosc
Przykład definicji
$definicja = 'IMIE|NAZWISKO|TELFON|MAIL';
Przyklad wartosci
$wartosc = 'JAN|KOWALSKI|123-456-789|JAKIS@MAIL.PL'
I teraz zrob sobie explode po znaku "|" dla definicji i wartosci, potem petla do tabeli asocjacyjnej w postaci
$i=0;
while($i<=count($def)) // obojetnie co w sumie i tak ilosc def i val musi byc taka sama {
$arr[$person_id][$def[$i]] = $val[$i];
$i++
}
Potem tylko dodatkowe funkcje ktore dadza return oczekiwanych wartosci, budowania definicji i wartosci .... i 100 innych ktore beda potrzbne
$arr[1]['IMIE'] // => john
$arr[1]['NAZWISKO'] // => black
Ja osobiscie stosuje powyższe rozwiaznie tylko i wylacznie w przypadku kiedy operator systemu buduje sobie slowniki ktore moga sie skladac z niewiadomej ilosci danych (tabela - kolumny i rowsy)... jeszcze mnie nie zawiodlo

(mimo iz ciezko sie to czyta w surowej postaci na bazie)
Ale jesli chodzi o jakies dane (pola) na ktore zwykly operator systemu (uzytkownik) nie ma wplywu a jedynie jest to wymagane przez zmiane w projekcie czyli twoj klient ci powiedzial ze teraz chce miec w formatce 3 telefony zamiast 1 to sie dodaje kolumny do tabeli i zmienia w aplikacji odpowiednie linijki