Accueil > Forum > > > > Trier un tableau à partir d'une valeur calculée
Trier un tableau à partir d'une valeur calculée
lundi 29 mars 2010 à 11:26:27 |
Trier un tableau à partir d'une valeur calculée

mikkro
|
Bonjour tout le monde.
Je developpe actuellement pour mon boulot, une cartothèque.
Tout fonctionne mais il y a quelque chose qui me chagrine, en effet je n'arrive pas à trier les résultats de ma recherche par mots clés par pertinence. Celle-ci etant calculée dans la boucle "for". Je voudrais bien entendu trier dans l'ordre décroissant.
Avec un bout de code je pense que ce sera plus simple pour les ames charitables qui pourraient m'aider
Code PHP :
<?php
include "../script/connection.inc";
include "../script/conv_date.inc";
$motscles=$_POST['zl_motscles'];//mots cles selectionnés dans la liste multiple
?>
<div align=center>
<table border=1 width=100%>
<tr>
<td align=center>
<big><b>Résultat de la recherche par mots clés</b></big>
<?php
if ($motscles){
echo '<br>Mots clés séléctionnés :<br>';
$cptMC=0;
foreach ($motscles as $idmotscles){
$motscles_text=mysql_result(mysql_query("select Lib_MotsClesCarte from c_motsclescarte where ID_MotsCles=$idmotscles"),0,0);
echo ' <font color=purple>',$motscles_text,'</font>';
$id_motscles.=";".$idmotscles;
$cptMC++; // compte le nombre de mots clés selectionnés
}
}else{
echo '<br>Vous n\'avez pas séléctionné de mots clés';
}
?>
</td>
</tr>
</table>
<hr />
<?php
$id_motscles_id = substr($id_motscles,1);//suppression du premier caractère, ici un ;
$motscles_id = str_replace ( ';', ' or MotsClesCarte_ID_MotsCles=', $id_motscles_id);
/****************Récupération des variables********************/
$sql="select Carte_ID_Carte".
" from c_cartemotsclescarte".
" where MotsClesCarte_ID_MotsCles=$motscles_id".
" order by Carte_ID_Carte";
$rs=mysql_query($sql);
while($lg=mysql_fetch_assoc($rs)){
$id_carte=$lg["Carte_ID_Carte"];
$id_carte_id.=";".$id_carte;
}
$id_carte_id = substr($id_carte_id,1);//suppression du premier caractère, ici un ;
$id_carte_id=explode(";",$id_carte_id);
$tot=count($id_carte_id);
$cpt=0;
for($i = 0; $i < $tot; $i++){
$j=$i+1;
$cpt++;// compte le nombre de fois où la carte apparait
if($id_carte_id[$i]==$id_carte_id[$j]){ //si la carte $i est egale à la carte $j on passe au suivant
}else{
$pertinence=($cpt/$cptMC)*100;
$pertinence=number_format($pertinence, 0, ',', '');// pertinence calculée
$cpt=0;// nombre de fois où la carte apparait remis à zero pour calcul de la carte suivante
$carte_id=$id_carte_id[$i];
$sql1=mysql_query("select * from c_carte where ID_Carte=$carte_id");
while($lg1=mysql_fetch_assoc($sql1)) // parcours chaque ligne du tableau résultant de la requête
{
//Récupération des variables
//...
}
//affichage des données
//...
}
}
?>
What else{  }
|
|
lundi 29 mars 2010 à 23:59:23 |
Re : Trier un tableau à partir d'une valeur calculée

JulSoft
|
Réponse acceptée !
Rapidement, voici comment je ferais (peut être pas exactement ce que tu cherches, j'ai parcouru ton code en croix):
- enregistrement de chaque resultat avec sa pertinance dans un array
- enregistrement de tous ces resultats dans un array, qu on trie avec usort
- une petit fonction de comparaison avec la pertinance comme critère.
La page de manuel de usort est un bon point de départ ;-)
Perso c'est comme ça que je fais pour trier des objets un peu compliqués.
Si tu veux plus de détails, hésites pas à demander, je te code volontier un exemple quand j'ai 5 minutes
|
|
mardi 30 mars 2010 à 09:08:50 |
Re : Trier un tableau à partir d'une valeur calculée

mikkro
|
Merci pour la réponse rapide.
En fait j'avais deja penser à faire cela mais j'ai du mal m'y prendre parce que j'ai laissé tomber.
Le problème est que je n'arrive pas à creer un array supplémentaire.
Pour faire simple voilà ce que je voudrais faire
j'ai un premier tableau, jusque là rien de bien compliqué
id_carte=array(1,1,1,1,2,2,2,2,2,2,3,3,3,4,4);
j'obtient par mon calcul le système suivant mais qui n'est pas un array
id_carte / 1 / 2 / 3 / 4
------------------------------
pertinence / 4 / 6 / 3 / 2 (pour faire simple je ne calcule pas ici les pourcentages)
Ce que j'aimerais donc c'est de classer mes cartes dans l'ordre décroissant de pertinence alors qu'actuellement elles sont
classées dans l'ordre de leurs identifiants.
Si tu peux donc me montrer simplement comment je peux faire ce serait vraiment sympa de ta part.
Merci d'avance
What else{  }
|
|
mardi 30 mars 2010 à 11:24:51 |
Re : Trier un tableau à partir d'une valeur calculée

mikkro
|
Réponse acceptée !
J'ai finalement réussi, donc je me dis que ca pourra servir alors voici mon code
@JulSoft Merci de ta reponse ca m'a bien remis sur la voie
J'ai en fait créé deux tableaux ayant les mêmes index
$tab_carte et $tab_pertin
ensuite je trie $tab_pertin avec arsort()
et enfin je me sert des index de $tab_pertin pour retrouver ceux de $tab_carte
j'espère que ca en aidera certains
Code PHP :
<?php
include "../script/connection.inc";
include "../script/conv_date.inc";
$motscles=$_POST['zl_motscles'];//mots cles selectionnés dans la liste multiple
?>
<div align=center>
<table border=1 width=100%>
<tr>
<td align=center>
<big><b>Résultat de la recherche par mots clés</b></big>
<?php
if ($motscles){
echo '<br>Mots clés séléctionnés :<br>';
$cptMC=0;
foreach ($motscles as $idmotscles){
$motscles_text=mysql_result(mysql_query("select Lib_MotsClesCarte from c_motsclescarte where ID_MotsCles=$idmotscles"),0,0);
echo ' <span class="mcselect">',$motscles_text,'</span>';
$id_motscles.=";".$idmotscles;
$cptMC++; // compte le nombre de mots clés selectionnés
}
}else{
echo '<br>Vous n\'avez pas séléctionné de mots clés';
}
?>
</td>
</tr>
</table>
<hr />
<?php
$id_motscles_id = substr($id_motscles,1);//suppression du premier caractère, ici un ;
$motscles_id = str_replace ( ';', ' or MotsClesCarte_ID_MotsCles=', $id_motscles_id);
/****************Récupération des variables********************/
$sql="select Carte_ID_Carte".
" from c_cartemotsclescarte".
" where MotsClesCarte_ID_MotsCles=$motscles_id".
" order by Carte_ID_Carte";
$rs=mysql_query($sql);
while($lg=mysql_fetch_assoc($rs)){
$id_carte=$lg["Carte_ID_Carte"];
$id_carte_id.=";".$id_carte;
}
$id_carte_id = substr($id_carte_id,1);//suppression du premier caractère, ici un ;
$id_carte_id=explode(";",$id_carte_id);
$tot=count($id_carte_id);
$cpt=0;
for($i = 0; $i < $tot; $i++){
$j=$i+1;
$cpt++;// compte le nombre de fois où la carte apparait
if($id_carte_id[$i]==$id_carte_id[$j]){//si la carte $i est egale à la carte $j on passe au suivant
}else{
$pertinence=($cpt/$cptMC)*100;
$pertinence=number_format($pertinence, 0, ',', '');// pertinence calculée
$tab_cart.=",".$id_carte_id[$i];//concatenation des identifiants de cartes
$tab_pert.=",".$pertinence;//concatenation des valeurs de pertinence
$cpt=0;// nombre de fois où la carte apparait remis à zero pour calcul de la carte suivante
}
}
$tab_cart = substr($tab_cart,1);//suppression du premier caractère, ici un ;
$tab_cart = explode(",",$tab_cart);//creation du tableau de carte
$tab_pert = substr($tab_pert,1);//suppression du premier caractère, ici un ;
$tab_pert = explode(",",$tab_pert);//creation du tableau de pertinence (les index sont identiques à ceux du tableau de carte)
arsort($tab_pert);//tri decroissant du tableau de pertinence
foreach ($tab_pert as $id => $pertin) {
$carte_id=$tab_cart[$id];//utilisation de l'index de $tab_pertin pour retrouver celui de $tab_carte
$sql1=mysql_query("select * from c_carte where ID_Carte=$carte_id");
while($lg1=mysql_fetch_assoc($sql1)) // parcours chaque ligne du tableau résultant de la requête
{
//Récupération des variables
}
//affichage des données
}
?>
What else{  }
|
|
Cette discussion est classée dans : mots, trier, clés, calculée, motscles
Répondre à ce message
Sujets en rapport avec ce message
Trier un tableau indexé [ par kitiop ]
Bonjour à tous,J'ai une chaîne composée de plusieurs mots que je transforme en un tableau avec : $mots=explode(" ",$mots);j'affiche
Récupérer les mots-clés [ par riggs ]
Salut,je voudrais récupérer les mots entrés par mes visiteurs sur le moteur de recherche (requete) pour les afficher dans champ recherche de mon siteh
Moteur de recherche [ par atoguum4ever ]
aTomicK Salut à tous,je cherche a faire un moteur de recherche en php et j'ai cru comprendre sur le forum que l
Parseur de mots clé avec connecteurs logique et parenthèse [ par PerfectSlayer ]
Bonjour à vous. Je travaille sur un robot qui joue au trivial poursuit. J'aurais besoin de comparer les réponses entrées par les joueurs à la réponse
j'ai besoin d'aide SVP [ par ouinez ]
ines la debutante:SVP aidez moi j'ai fais mon premier pgm en php.un moteur ki recherche dans une FAQ (foieraux questions)ou l'utilisateur doit sais
Moteur de recherche avec plusieurs mots clés [ par ptiniko ]
Bonjour, J'ai un problème concernant une recherche en PHP avec plusieurs mots clés.function search_friends($keywords, $debut, $fin) => $keywords es
Bibliotheque des mots clés utiliés en langage PHP [ par bonheur123 ]
Bonjour,Je vousdrais vous demander de m'indiquer où trouver une bibliotheque ou un repertoire des mots clés utilisés dans le langage de programmation
Recherche par mots clés mais en gardant l'ordre spécifié. [ par bobino75 ]
Bonjour, Je me cherche une manière de faire une recherche par mots clés mais en gardant l'ordre spécifié. La personne peut faire une recherche pou
Quel editeur pour faire de la POO ? [ par lolymeupy ]
Bonjour, je recherche un éditeur qui permette de faire de la POO. Je m'explique, a mon taf', ils ont installé une version de Zend Studio 5.5.0, avec
extraire des mots clés d'un texte [ par pifethercule ]
Bonjour, j'essaye d'extraire des mots clés de textes... mes mots clés sont dans une variable "$keywords" tous séparés par un pipe "|", pour faire des
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|