Page 1 sur 1

tri d'un tableau par présence ou absence de mot clé

Posté : 11 janv. 2015, 12:48
par hakazizi
bonjour,
je cherche a trier le contenu d'un tableau de la manière suivante.
1 ne contient aucun des mots clé
2 contient motclé1
3 contient motclé2
4 contient motclé3-motclé2
5 contient motclé4
5 contient motclé4-motclé2
ce pour afficher les résultats dans un ordre précis
je n'ai rien trouvé nul part
merci
je vous met le code que j'ai ci dessous:
<?php
$tableau_photo=array(); // on créer le tableau qui contiendra les photos
$varunique="copie"; // Les mots a rechercher pour remplir le tableau
$repertoire=opendir('images/'); // on ouvre le repertoire qui contient les photos
while($photo=readdir($repertoire)){ // on fait une boucle sur le repertoire
if(strstr($photo,$varunique)){ // on verifie les mots clés
$tableau_photo[]=$photo;} // on insère les photos dans le tableau
 }closedir(); // on ferme le repertoire qui contient les photos
$nb_photo=count($tableau_photo); // on compte les photos
if($nb_photo==0){ // on vérifie que le tableau n'est pas vide 
echo'erreur inconue merci de prevenir un administrateur<br /><a href="contact.php">contacter un administrateur</a><br />';exit();} // si il est vide on affiche un message d'erreur et on arrette le script.


 // ??? on trie les valeurs 
 // qui ne contient ni profile, ni dos, ni zoom,
 // qui ne contient pas profile et dos mais qui contient zoom
 // qui contient  profile mais pas dos ni zoom
 // qui contient profile et zoom mais pas dos
 // qui qui contient dos mais ni profile ni zoom
 // qui contient dos et zoom mais pas profile
 // ce pour afficher les photos dans un ordre précis



foreach($tableau_photo as $photo1){ // on fait la boucle sur les photos
echo $photo1.'<br>';
}




echo'nombre de photo : '.$nb_photo;
?>

Re: tri d'un tableau par présence ou absence de mot clé

Posté : 11 janv. 2015, 15:10
par Elie
Hello,

Tu peux nous donner un exemple de ta liste de photo ?
Les photos peuvent apparaitrent dans plusieurs tableaux ou que dans ce lui auquel il repond au maximum de conditions ?

Re: tri d'un tableau par présence ou absence de mot clé

Posté : 11 janv. 2015, 15:45
par hakazizi
idéalement dans un seul tableau

en exemple
il peut y avoir:
  • maphoto.jpg
    maphoto-zoom.jpg
    maphoto-profile.jpg
    maphoto-profile-zoom-haut.jpg
    maphoto-profile-zoom-bas.jpg
    maphoto-dos.jpg
    maphoto-dos-zoom.jpg
    ma-photo-dos-zoom-centre.jpg
et si il n'y a pas de critère passer au suivant.
le seul impératif
la photo de face sans mot clé doit se retrouvé en premier suivi de ses zoom (ordre indifférent) si il y en a
la photo de profile arrive ensuite suivi de ses éventuel zoom
et enfin idem pour les photos de dos
les seul paramètre important c'est pas de mot clef face,profile dos et zoom
merci

Re: tri d'un tableau par présence ou absence de mot clé

Posté : 12 janv. 2015, 01:52
par Elie
Cadeau :
<?php

 $aImages = array('maphoto.jpg', 'maphoto-zoom.jpg', 'maphoto-profile.jpg', 'maphoto-profile-zoom-haut.jpg', 'maphoto-profile-zoom-bas.jpg', 'maphoto-dos.jpg', 'maphoto-dos-zoom.jpg', 'ma-photo-dos-zoom-centre.jpg');
 $aPoints = array('profile' => 1, 'dos' => 2, 'zoom' => 4);
 $classement = array();
 
 foreach($aImages as $v) {
	 $point = 0;
	 foreach($aPoints as $key => $val) {
		 $point += strstr($v, $key) ? $aPoints[$key] : 0;
	 }
	 $classement[$point][] = $v;
 }
 
 print_r($classement);
 
?>

Re: tri d'un tableau par présence ou absence de mot clé

Posté : 18 janv. 2015, 00:38
par hakazizi
merci Elie
j'ai adapter ce que tu m'as donné cela fonctionne.
j'ai les bonne clé dans l'ordre mais a l'affichage cela ne suit pas j'ai essayé plusieurs fonction de trie mais aucune n'arrive a me mettre les valeurs dans l'ordre que je veux.
la première valeur des arrays c'est simple mais la seconde parti je n'y arrive pas.
  $aPoints = array('profile' => 1, 'dos' => 2);
  $classement = array();
$bPoints = array('zoom' => 1,'haut' => 2, 'centre' => 3 , 'bas' => 4);
   foreach($tableau_photo as $v) {
          $point = 0;
		  $point1 = 0;
          foreach($aPoints as $key => $val) {
                  $point += strstr($v, $key) ? $aPoints[$key] : 0;
          }
          foreach($bPoints as $key => $vale) {
                  $point1 += strstr($v, $key) ? $bPoints[$key] : 0;
          }
          $classement[$point][$point1]= $v;
  }
print_r($classement);
ksort($classement);
array_multisort($classement[0],SORT_NUMERIC,SORT_ASC);
array_multisort($classement[1],SORT_NUMERIC,SORT_ASC);
array_multisort($classement[2],SORT_NUMERIC,SORT_ASC);
print_r($classement);
resultat:

Code : Tout sélectionner

Array // avant traitement // ( [2] => Array ( [4] => costume-danse-orientale-voile-rouge-dos-zoom-centre.jpg [0] => costume-danse-orientale-voile-rouge-dos.jpg [3] => costume-danse-orientale-voile-rouge-dos-zoom-haut.jpg [5] => costume-danse-orientale-voile-rouge-dos-zoom-bas.jpg ) [0] => Array ( [1] => costume-danse-orientale-voile-rouge-zoom.jpg [0] => costume-danse-orientale-voile-rouge.jpg ) [1] => Array ( [0] => costume-danse-orientale-voile-rouge-profile.jpg ) ) Array // après traitement // ( [0] => Array ( [0] => costume-danse-orientale-voile-rouge.jpg [1] => costume-danse-orientale-voile-rouge-zoom.jpg ) [1] => Array ( [0] => costume-danse-orientale-voile-rouge-profile.jpg ) [2] => Array ( [0] => costume-danse-orientale-voile-rouge-dos-zoom-bas.jpg [1] => costume-danse-orientale-voile-rouge-dos-zoom-haut.jpg [2] => costume-danse-orientale-voile-rouge-dos.jpg [3] => costume-danse-orientale-voile-rouge-dos-zoom-centre.jpg ) )

Re: tri d'un tableau par présence ou absence de mot clé

Posté : 18 janv. 2015, 18:29
par hakazizi
bonjour
c'était tellement simple que je ne l'avait pas vue :/
"ksort($classement[0]);"
il suffit de préciser la ligne du tableau
merci.
<?php
$i=1;
$tableau_photo=array(); // on créer le tableau qui contiendra les photos
$varunique="costume danse orientale voile rouge"; // Les mots a rechercher pour remplir le tableau
$recherche=str_replace(" ","-",$varunique); // on modifie les espaces par des tirets
$repertoire=opendir('images/'); // on ouvre le repertoire qui contient les photos
while($photo=readdir($repertoire)){ // on fait une boucle sur le repertoire
if(strstr($photo,$recherche)){ // on verifie les mots clés
$tableau_photo[]=$photo;} // on insère les photos dans le tableau
 }closedir(); // on ferme le repertoire qui contient les photos
$nb_photo=count($tableau_photo); // on compte les photos
if($nb_photo==0){ // on vérifie que le tableau n'est pas vide 
echo'erreur inconue merci de prevenir un administrateur<br /><a href="contact.php">contacter un administrateur</a><br />';exit();} // si il est vide on affiche un message d'erreur et on arrette le script
  $aPoints = array('profile' => 1, 'dos' => 2);
  $classement = array();
$bPoints = array('zoom' => 1,'haut' => 2, 'centre' => 3 , 'bas' => 4);
  foreach($tableau_photo as $v) {
          $point = 0;
		  $point1 = 0;
          foreach($aPoints as $key => $val) {
                  $point += strstr($v, $key) ? $aPoints[$key] : 0;
          }
          foreach($bPoints as $key => $vale) {
                  $point1 += strstr($v, $key) ? $bPoints[$key] : 0;
          }
          $classement[$point][$point1]= $v;
  }
print_r($classement);
ksort($classement); //on ordonne selon les clé
ksort($classement[0]);
ksort($classement[1]);
ksort($classement[2]);
print_r($classement);
echo'<br>nombre de photo : '.$nb_photo;
?>