// Функция для анализа результатов поиска
function analyzeSearchResults(KeywordSearchResponse $response): array {
return [
'searchInfo' => [
'keyword' => $response->keyword,
'totalFound' => $response->searchFilmsCountResult,
'pagesCount' => $response->pagesCount,
'currentPage' => $response->currentPage,
'hasMorePages' => $response->hasNextPage()
],
'filmsAnalysis' => [
'totalFilms' => count($response->films),
'filmsWithRating' => count(array_filter($response->films, fn($f) => $f->rating !== null)),
'filmsWithYear' => count(array_filter($response->films, fn($f) => $f->year !== null)),
'averageRating' => 0,
'yearRange' => ['min' => null, 'max' => null]
]
];
}
// Функция для фильтрации результатов поиска
function filterSearchResults(KeywordSearchResponse $response, callable $filter): array {
return array_filter($response->films, $filter);
}
// Функция для сортировки результатов поиска
function sortSearchResults(KeywordSearchResponse $response, callable $comparator): array {
$films = $response->films;
usort($films, $comparator);
return $films;
}
// Функция для получения статистики по годам
function getYearStats(KeywordSearchResponse $response): array {
$years = array_filter(array_map(fn($film) => $film->year, $response->films));
if (empty($years)) {
return ['count' => 0, 'distribution' => []];
}
return [
'count' => count($years),
'min' => min($years),
'max' => max($years),
'average' => round(array_sum($years) / count($years)),
'distribution' => array_count_values($years)
];
}
// Функция для получения статистики по рейтингам
function getRatingStats(KeywordSearchResponse $response): array {
$ratings = array_filter(array_map(fn($film) => $film->rating, $response->films));
if (empty($ratings)) {
return ['count' => 0, 'average' => 0, 'distribution' => []];
}
return [
'count' => count($ratings),
'average' => round(array_sum($ratings) / count($ratings), 2),
'min' => min($ratings),
'max' => max($ratings),
'distribution' => array_count_values(array_map(fn($r) => floor($r), $ratings))
];
}
// Функция для поиска похожих ключевых слов
function findSimilarKeywords(KeywordSearchResponse $response): array {
$similarKeywords = [];
$baseKeyword = strtolower(trim($response->keyword));
// Простая логика поиска похожих слов
$variations = [
$baseKeyword,
$baseKeyword . 'ы',
$baseKeyword . 'и',
$baseKeyword . 'а',
$baseKeyword . 'я'
];
foreach ($variations as $variation) {
if ($variation !== $baseKeyword) {
$similarKeywords[] = $variation;
}
}
return $similarKeywords;
}
// Функция для получения топ результатов
function getTopSearchResults(KeywordSearchResponse $response, int $limit = 10): array {
$sortedFilms = sortSearchResults($response, function($a, $b) {
$ratingA = $a->rating ?? 0;
$ratingB = $b->rating ?? 0;
return $ratingB <=> $ratingA;
});
return array_slice($sortedFilms, 0, $limit);
}
// Использование
$response = $filmService->searchByKeyword('комедия');
// Анализ результатов
$analysis = analyzeSearchResults($response);
echo "=== Анализ результатов поиска ===\n";
echo "Ключевое слово: '{$analysis['searchInfo']['keyword']}'\n";
echo "Всего найдено: {$analysis['searchInfo']['totalFound']}\n";
echo "Страниц результатов: {$analysis['searchInfo']['pagesCount']}\n";
echo "Есть еще страницы: " . ($analysis['searchInfo']['hasMorePages'] ? 'Да' : 'Нет') . "\n";
// Статистика фильмов
$filmsAnalysis = $analysis['filmsAnalysis'];
echo "\nСтатистика фильмов:\n";
echo "Всего фильмов на странице: {$filmsAnalysis['totalFilms']}\n";
echo "Фильмов с рейтингом: {$filmsAnalysis['filmsWithRating']}\n";
echo "Фильмов с годом: {$filmsAnalysis['filmsWithYear']}\n";
// Статистика по годам
$yearStats = getYearStats($response);
if ($yearStats['count'] > 0) {
echo "\nСтатистика по годам:\n";
echo "Диапазон: {$yearStats['min']} - {$yearStats['max']}\n";
echo "Средний год: {$yearStats['average']}\n";
echo "\nРаспределение по годам:\n";
arsort($yearStats['distribution']);
foreach (array_slice($yearStats['distribution'], 0, 10, true) as $year => $count) {
echo "- {$year}: {$count} фильмов\n";
}
}
// Статистика по рейтингам
$ratingStats = getRatingStats($response);
if ($ratingStats['count'] > 0) {
echo "\nСтатистика по рейтингам:\n";
echo "Средний рейтинг: {$ratingStats['average']}\n";
echo "Диапазон: {$ratingStats['min']} - {$ratingStats['max']}\n";
echo "\nРаспределение по рейтингам:\n";
krsort($ratingStats['distribution']);
foreach ($ratingStats['distribution'] as $rating => $count) {
echo "- {$rating}+: {$count} фильмов\n";
}
}
// Топ результатов
$topResults = getTopSearchResults($response, 5);
echo "\nТоп-5 результатов:\n";
foreach ($topResults as $index => $film) {
echo ($index + 1) . ". {$film->getDisplayName()}";
if ($film->rating) {
echo " (рейтинг: {$film->rating})";
}
echo "\n";
}
// Похожие ключевые слова
$similarKeywords = findSimilarKeywords($response);
echo "\nПохожие ключевые слова:\n";
foreach ($similarKeywords as $keyword) {
echo "- {$keyword}\n";
}