begin process at 2012 05 31 11:18:51
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

Trier un tableau à partir d'une valeur calculée


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

Membre Club
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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales