Modyfikacja kodu powyżej... nie rób w IF porównań do wszystkich kluczy bo sie zajedziesz. Skorzystaj z array_key_exists w jednym przebiegu pętli lub array_key_intersect. Zamiast więc walić drugiego foreach użyj tylu IF, ile kluczy chcesz wyciągnąć lub zamotaj tam
foreach($tablica as $key => $rekord){
$result[ $key ]['ans1'] = $rekord['ans1'];
}
$result[ $key ]['ans2'] = $rekord['ans2'];
}
$result[ $key ]['ans3'] = $rekord['ans3'];
}
$result[ $key ]['ans4'] = $rekord['ans4'];
}
}
To drugie jest zwięźlejsze bo da się doprowadzić do formy, ale rzadziej używane, bo wiele osób zwyczajnie tej funkcji nie zna, stosując multum petli i IFów

foreach($tablica as $key => $rekord){
$result[ $key ] = array_intersect_key
( $rekord, array( 'ans1' =>'', 'ans2' =>'', 'ans3' =>'', 'ans4' =>'' ) ) ); }
Problem w tym, które uważasz za prostsze , logiczniejsze, łatwiejsze do zrozumienia lub w testach wyjdzie Ci szybsze bądź wydajniejsze, mniej pamięciożerne. Te testy sobie sam przeprowadż jesli chcesz. A to nie jedyne możliwe podejście do problemu. Podałem zaledwie 2 sposoby, choć jest ich więcej

Dlaczego tyle IF zamiast pętli? Pomyśl co będzie, jeśli mamy 5 elementów kolekcji, a każdy ma 10 pól, zaś Ty wyciagasz 3 z nich.
Pomysł luniaka:
1 foreach (5 przebiegów) -> 2 foreach (10 przebiegów) w każdym IF z 3 "lub" ==> 50 * 3 sprawdzenia
Pomysł z IF mój:
1 foreach (5 przebiegów) -> w każdym przebiegu 4 IF ==> 5 * 4 sprawdzenia
Pomysł mój z array intersect
1 foreach (5 przebiegów) -> w każdym przebiegu array intersect ==> 5 * wywołanie funkcji