Optimisation d'une fonction

  • Auteur de la discussion Auteur de la discussion HeLiArK
  • Date de début Date de début
Nouveau WRInaute
Bonsoir,

Je viens à vous, afin que vous puissiez m'aider sur l'optimisation d'une fonction.

En effet, je pense que celle-ci peut être optimisé, mais je ne vois pas comment pourrais-je faire.

Voici ma fonction:

PHP:
<span class="syntaxdefault"><br />function calculEvolution</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$type</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    global $bdd</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    <br />    $pts </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    <br />    $batiment </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">        </span><span class="syntaxstring">'enseignement'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">            </span><span class="syntaxstring">'req'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'ecole,college,atelierarts,bibliotheque,universite'<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">),<br /></span><span class="syntaxdefault">            </span><span class="syntaxstring">'bat'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'ecole'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'5'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'college'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'20'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'atelierarts'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'20'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'bibliotheque'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'25'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'universite'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'30'<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">        </span><span class="syntaxkeyword">),<br /></span><span class="syntaxdefault">        </span><span class="syntaxstring">'croyance'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">            </span><span class="syntaxstring">'req'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'chapelle,eglise,cathedrale'<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">),<br /></span><span class="syntaxdefault">            </span><span class="syntaxstring">'bat'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'chapelle'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'15'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'eglise'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'25'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'cathedrale'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'60'<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">        </span><span class="syntaxkeyword">),<br /></span><span class="syntaxdefault">        </span><span class="syntaxstring">'popularite'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">            </span><span class="syntaxstring">'req'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'fontaine,statue,jardins,palais,hippodrome'<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">),<br /></span><span class="syntaxdefault">            </span><span class="syntaxstring">'bat'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'fontaine'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'8'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'statue'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'15'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'jardins'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'20'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'palais'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'30'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'hippodrome'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'27'<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">        </span><span class="syntaxkeyword">),<br /></span><span class="syntaxdefault">        </span><span class="syntaxstring">'securite'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">            </span><span class="syntaxstring">'req'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'potence,cachots,tribunalcitoyen'<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">),<br /></span><span class="syntaxdefault">            </span><span class="syntaxstring">'bat'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'potence'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'15'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'cachots'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'35'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'tribunalcitoyen'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'50'<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">        </span><span class="syntaxkeyword">),<br /></span><span class="syntaxdefault">        </span><span class="syntaxstring">'salubrite'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">            </span><span class="syntaxstring">'req'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'hopital,dispensaire,lavoir,fossecommune,cimetiere,caniveaux,egouts,decharge,pavage,puits,servicefunebre'<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">),<br /></span><span class="syntaxdefault">            </span><span class="syntaxstring">'bat'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> array</span><span class="syntaxkeyword">(<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'hopital'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'10'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'dispensaire'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'7'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'lavoir'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'5'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'fossecommune'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'6'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'cimetiere'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'8'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'caniveaux'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'6'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'egouts'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'9'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'decharge'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'10'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'pavage'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'12'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'puits'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'15'</span><span class="syntaxkeyword">,<br /></span><span class="syntaxdefault">                </span><span class="syntaxstring">'servicefunebre'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> </span><span class="syntaxstring">'12'<br /></span><span class="syntaxdefault">            </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">        </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    foreach </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$batiment</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$type</span><span class="syntaxkeyword">][</span><span class="syntaxstring">'req'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> as $i</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        $sql </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $i</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    $req </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $bdd</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">prepare</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"SELECT "</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$sql</span><span class="syntaxkeyword">.</span><span class="syntaxstring">" FROM player_batiment WHERE joueur= :joueur"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    $req</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">bindValue</span><span class="syntaxkeyword">(</span><span class="syntaxstring">':joueur'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $_SESSION</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'id'</span><span class="syntaxkeyword">],</span><span class="syntaxdefault"> PDO</span><span class="syntaxkeyword">::</span><span class="syntaxdefault">PARAM_INT</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    $req</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">execute</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">    $don </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $req</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">fetch</span><span class="syntaxkeyword">();<br /></span><span class="syntaxdefault">    <br />    foreach </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$batiment</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$type</span><span class="syntaxkeyword">][</span><span class="syntaxstring">'bat'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> as $ii </span><span class="syntaxkeyword">=></span><span class="syntaxdefault"> $v</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">        if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$don</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$ii</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> 1</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">            $pts </span><span class="syntaxkeyword">+=</span><span class="syntaxdefault"> $v</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">        </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    return $pts</span><span class="syntaxkeyword">;<br />}<br /></span><span class="syntaxdefault"> </span>

Cette fonction sert, à me donner le pourcentage d'évolution du domaine. En effet, grâce aux points indiqué sur chaque bâtiments dans l'array, si le bâtiment est construit, ça ajoute ce nombre de point. (Ce nombre ne peux pas dépassé les 100).

Exemple:

Si je fais <?php echo calculEvolution('securite'); ?>, il va regarder dans MySQL que les bâtiments existent, si c'est le cas, il incrémente le nombre de point aux points total qui celui-ci à la fin me donnera le résultat.

Avez-vous des idées, sur comment améliorer cette fonction.

Merci d'avance à ceux qui sauront m'aider ;).
 
WRInaute accro
comment est structurée la table que tu consulte ?
Il y a peut être moyen de lier une table de points a la table de bâtiment ( table_point[id_type_bat, valeur]) construit pour faire en sorte que le total de points te soit livré directement par la requête.
 
Nouveau WRInaute
Chaque colonne représente un bâtiment (+ id du joueur et l'id en auto_incremente). Le type des bâtiments utilisé est smallint().

EDIT:

Au début, j'avais pensé à faire une jointure SQL... Mais, je me suis dit faire une colonne de plus plus pour mettre les points d'évolution sur quelques bâtiments... Je trouve ça un peu bizarre... Si ça aurait concerné tous les bâtiments, j'aurais dit OK... Mais là que quelques bâtiments, je trouve ça inutile non ?
 
WRInaute accro
faut mettre les point bâtiment dans une table et utiliser ta table actuelle comme avant.

Avec une requête du genre select sum(point) from table_point where id_bat in(select id_bat from table_actuelle where id_joueur = ?x?)

ta table point comprend deux colonnes :
1/ id du type de bâtiment
2/ valeur en point

mais je suis pas sur d'avoir bien compris la structure de ta table actuelle peut tu donner une ligne de valeur avec le nom de champs ?
 
WRInaute impliqué
Pfffff...

Ca n'a rien à voir mais quand j'ai vu le titre je me suis retrouvé d'un coup 20 ans en arrière à l'université en maths à faire de l'optimisation de fonctions :mrgreen: (optimisation non convexe sous contraintes pour ceux à qui ça parle...)
 
WRInaute accro
Je pense qu'il faut remettre à plat la base de données...

1. Ajouter une table batiment (id,type,nom,points)
2. Au lieu d'avoir une table player_batiment avec une seule ligne par joueur, il vaut mieux avoir une ligne par combinaison (joueur,batiment)

Ensuite tu peux obtenir ce que tu cherches en une ligne de SQL:
Code:
SELECT sum(b.points) FROM batiment b JOIN player_batiment bp ON b.id=bp.id_batiment WHERE bp.id_player=? AND b.type=?

Voire même, si tu veux ajouter les points à tout le monde d'un coup:
Code:
UPDATE player p SET p.points=p.points+sum(b.points) FROM batiment b JOIN player_batiment bp ON b.id=bp.id_batiment WHERE bp.id_player=p.id

Jacques.
 
Nouveau WRInaute
Salut,

Désolé, pour le retard de ma réponse ...

Merci pour vos réponses ;).

Je mets le screen:

J'ai coupé parce qu'il y a pas mal de colonne...

904378screen.jpg


Cordialement,
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut