actorRepository->findOneRandom(4); // Actors for the grid $actors = []; $leftSize = 0; $rightSize = 0; foreach (str_split(strtolower($mainActor->getName())) as $char) { if (!preg_match('/[a-z]/', $char)) { continue; } $tryFindActor = 0; do { $actor = $this->actorRepository->findOneRandom(4, $char); ++$tryFindActor; } while ( $actor === $mainActor || in_array($actor, array_map(fn ($actorMap) => $actorMap['actor'], $actors)) || $tryFindActor < 5 ); $actorData = [ 'actor' => $actor, 'pos' => strpos($actor->getName(), $char), ]; if ($leftSize < $actorData['pos']) { $leftSize = $actorData['pos']; } $rightSizeActor = strlen($actor->getName()) - $actorData['pos'] - 1; if ($rightSize < $rightSizeActor) { $rightSize = $rightSizeActor; } $actors[] = $actorData; } // Predict grid size $width = $rightSize + $leftSize + 1; $middle = $leftSize; // Build JSON-serializable grid for React $grid = array_map(fn (array $actorData) => [ 'actorName' => $actorData['actor']->getName(), 'actorId' => $actorData['actor']->getId(), 'pos' => $actorData['pos'], ], $actors); return $this->render('homepage/index.html.twig', [ 'grid' => $grid, 'width' => $width, 'middle' => $middle, ]); } }