Masz dwie tablice. Jedna to tablica wyjściowa (z której będziesz czerpał dane), a druga to tablica wynikowa (początkowo pusta, będziesz ją dopiero uzupełniał).
Zrób foreach na tablicy. Dla każdego elementu sprawdź, jakiej osoby on dotyczy. Jeżeli w tablicy wynikowej nie dodałeś jeszcze informacji na temat tej osoby, dodaj do tej wyjściowej tablicy element w tym stylu (z jedną książką):
'0' => [
'id' => 1,
'name' => 'Jan',
'books' => [
[
'book_id' => 2,
'title' => 'Tytul1'
],
]
],
Natomiast jeżeli te informacje istnieją w tablicy (sprawdź np. po id osoby), dodaj tylko informacje o obecnej książce.
Jeżeli potrzebujesz dokładniejszych wyjaśnień, to napisz.