/** * Retourne la liste de tous les films, avec la note probable pour un membre * @return array : liste des films avec la note probable du membre */ public function listeRecommandations($m) { // Création d'un tableau associant à chaque genre son coefficient pour le membre $listeStats = $this->listeStatsGenres($m); foreach ($listeStats as $s) { $genres[$s["genre"]] = $s["coefficient"]; } // Tableau à retourner : tableau avec les notes des films $i = 0; foreach ($this->listeFilms as $film) { $res[$i]["id"] = $film->getID(); $res[$i]["titre"] = $film->getTitre(); $moyenne = $film->getAverage($this); // moyenne du film $genresFilm = $film->getGenres(); // liste des genres du film $noteProbable = 0; for ($j = 0; $j < count($genresFilm); $j++) { // pour chaque genre du film, on multiplie la moyenne du film par le coeff du genre, et on l'ajoute à la note probable du film $noteProbable += $moyenne * $genres[$genresFilm[$j]->name]; } $res[$i]["noteProbable"] = $noteProbable / count($genresFilm); // on divise par le nombre de genres pour obtenir la moyenne des moyennes (oui, monsieur!) $i++; } // on supprime les films déjà vus par le membre foreach ($res as &$a) { $f = Film::createFromID($a["id"], $this); $noteDonnee = $f->getNote($m->getID()); if (!is_null($noteDonnee)) { $a["noteProbable"] = -1; } } // avant de retourner le tableau, on le trie pour afficher les meilleurs notes devant uasort($res, function ($a, $b) { return $b["noteProbable"] - $a["noteProbable"]; }); // puis on divise les notes par 100 pour faire un truc à peu près sur 10 foreach ($res as &$a) { $a["noteProbable"] /= 100; } return $res; }