Trie d'un répertoire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Trie d'un répertoire

par Johnstyle » 28 oct. 2006, 10:26

personne ne saurais ?

par Johnstyle » 27 oct. 2006, 11:38

c'est bon j'ai entierement revu mon code.
Le trie se fait correctement mais maintenant j'ai un autre souci :p

donc le trie se fait decroissant

mais toutes les 5 ligne je creer un nouvelle page et les résultats sortent comme ceci :

page1
doc 05
doc 04
doc 03
doc 02
doc 01

page 2
doc 10
doc 09
doc 08
doc 07
doc 06

ect ...

alors que j'aimerai que ce soit l'inverse

page 1
doc 10
doc 09
doc 08
doc 07
doc 06

page2
doc 05
doc 04
doc 03
doc 02
doc 01

ect ...

je pense qu'il faut juste modifier la partie du code qui creer une nouvelle page mais je n'y arrive pas ..
<table width="100%" cellpadding="5" cellspacing="5" >
  <tr>
    <td align="left"><div class="titre"><u>Les Docs </u></div></td>
  </tr>
  <tr>
    <td align="left"><table width="100%" >
        <tr>
          <td>Documents : </td>
          <td width="200" align="right">&nbsp;  		  </td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td align="right">&nbsp;</td>
        </tr>
      </table>
	  
	  
<?
$Nmax = 5; // nombre par page
$Ncur = -2; // n° de la fiche courante
$Ndeb=@$_GET["num"]; // 1ère fiche transmise par l'URL

$PATH = '../docs/';// Listage d'un répertoire $PATH
if ($dir = @opendir($PATH)) {// ouverture du dossier 
  
  
    while (($file = readdir($dir)) && ($Ncur<$Nmax+$Ndeb)) {
if($Ncur>=$Ndeb) { // lecture d'une entrée 
        //création d'un tableau à 2 colonnes : nom + date fichiers 
       
	   if ($file!=='.' && $file!=='..'){
	    $tab[] = array($file);  }}
		// une de plus
  $Ncur++;
        // sauvegarde du nom du fichier et de sa date 
    }
    closedir($dir); // fermeture du dossier 
} 

//tri du tableau sur les dates
function cmp($a,$b) {
    if ($a[1] == $b[1])
        return 0;
    return ($a[1] < $b[1]) ? -1 : 1;
}

usort($tab, "cmp");

foreach($tab as $elem) {
    //formatage de la date avec mktime() selon le format retourné par filemtime()

    require_once("../docs/$elem[0]");
		  
    echo "<table width='100%' cellpadding='5'>";
    echo "<tr>";
    echo "<td width='25%' rowspan='3' align='center'>".$image."</td>";
    echo "<td colspan='2' class='titre'>".$titre."</td>";
    echo "</tr>";
    echo "<tr>";
    echo "<td colspan='2'>".$description."</td>";
    echo "</tr>";
    echo "<tr>";
    echo "<td width='42%'>&nbsp;</td>";
    echo "<td width='33%'><div align='center'><a href='index.php?page=down'>T&eacute;l&eacute;charger</a></div></td>";
    echo "</tr>";
    echo "</table>";
}
?>

      <table width="100%" >
        <tr>
          <td>&nbsp;</td>
          <td align="right">&nbsp;</td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td width="200" align="right">
		  
		  <table cellpadding=3><tr>
<?
// Navigation
// Des fiches avant ?
if($Ndeb > 0) { ?>
   <td>
      <A href="?num=<? echo $Ndeb-$Nmax; ?>"
         >Retour</A>
   </td>
<? }
// Des fiches après ?
if($file) { ?>
   <td>
      <A href="?num=<? echo $Ncur; ?>">Suite</A>
   </td>
<? } ?>
</tr></table>

</td>
        </tr>
      </table></td>
  </tr>
</table>
merci

par Johnstyle » 27 oct. 2006, 10:47

j'ai du me tromper ^^"

par Cyrano » 27 oct. 2006, 10:26

:shock: Je vois pas le rapport : cette fonction va prendre un timestamp en paramètre pour retourner une date formatée : je ne vois pas en quoi ça peut affecter un tri quelconque :-k

par Johnstyle » 27 oct. 2006, 10:13

et sinon avec la fonction :
function dd($date) {
   return date("d/m/Y H:i:s",$date);
}
normalement la liste devrai etre classé par odre d'enregitrement ?

par Johnstyle » 27 oct. 2006, 10:09

ok je vais essayer de remanier mon code avec array

par Cyrano » 27 oct. 2006, 10:06

Le problème dans ton code, c'est que tu ne passes par par un tableau pour stocker tes informations et tu affiches directement le contenu de ton répertoire dans ta page : c'est donc affiché dans l'ordre où c'est trouvé.

Donc il faut commencer par parcourir ton répertoire, enregistrer les informations dans un tableau indexé, trier ton tableau et ensuite seulement procéder à l'affichage à partir du tableau trié.

par Johnstyle » 27 oct. 2006, 10:03

oui, enfait je sais a peu pres quel fonction utiliser mais je ne sai spas comment l'inserer dans mon code.

j'ai trouver cet exemple :
<?php
$fruits = array("papaye","orange","banane","ananas");
rsort($fruits);
foreach ($fruits as $key => $val) {    
echo "$key = $val\n";
}
?>
apres plusiseurs heures de test je n'ai toujour pas réussi a l'intergre a mon code ..

par Cyrano » 27 oct. 2006, 09:40

As-tu regardé du coté de la fonction rsort() ?

Trie d'un répertoire

par Johnstyle » 27 oct. 2006, 09:05

Bonjour,

j'aimerai afficher le contenu d'un dossier sur une page web.
j'ai donc assembler ce code, il marche tres bien mais là ou je bloque c'est pour le trie.
J'aimerai que les fichiers apparaissent par ordre décroissant et je n'arive pas a trouver le morceau de code corespondant.
j'ai essayer avec sort() / arsort() mais je ne sais pas ou le placer ..
<?
$chemin="../dossier/";
$d=opendir("$chemin"); 



$Nmax = 5; // nombre par page
$Ncur = -2; // n° de la fiche courante
$Ndeb=@$_GET["num"]; // 1ère page transmise par l'URL



?>
<table width="100%" cellpadding="5" cellspacing="5" >
  <tr>
    <td align="left"><div class="titre"><u>Les Docs</u></div></td>
  </tr>
  <tr>
    <td align="left"><table width="100%" >
        <tr>
          <td>Liste des Dossiers</td>
          <td width="200" align="right">&nbsp;  		  </td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td align="right">&nbsp;</td>
        </tr>
      </table>







<?
//----------[DEBUT BOUCLE]------------ 
while (($entry = readdir($d)) && ($Ncur<$Nmax+$Ndeb)) {
if($Ncur>=$Ndeb) {

if ($entry!=='.' && $entry!=='..'){




    require_once("../dossier/$entry");?> 
		  
      <table width="100%" cellpadding="5" >
      <tr>
        <td width="25%" rowspan="3" align="center"><?php echo $image ?></td>
        <td colspan="2" class="titre"><?php echo $titre ?></td>
        </tr>
      <tr>
        <td colspan="2"><?php echo $description ?></td>
        </tr>
      <tr>
        <td width="42%">&nbsp;</td>
        <td width="33%"><div align="center"><a href="index.php?page=down">T&eacute;l&eacute;charger</a></div></td>
      </tr>
    </table>   <? 
 }}
// une de plus
  $Ncur++;
} 
//------------[FIN BOUCLE]------------ 
 
?>

	     
      <table width="100%" >
        <tr>
          <td>&nbsp;</td>
          <td align="right">&nbsp;</td>
        </tr>
        <tr>
          <td>&nbsp;</td>
          <td width="200" align="right">
		  
		  <table cellpadding=3><tr>
<?
// Navigation
// Des pages avant ?
if($Ndeb > 0) { ?>
   <td>
      <A href="?num=<? echo $Ndeb-$Nmax; ?>"
         >Retour</A>
   </td>
<? }
// Des pages après ?
if($entry) { ?>
   <td>
      <A href="?num=<? echo $Ncur; ?>">Suite</A>
   </td>
<? } ?>
</tr></table>

</td>
        </tr>
      </table></td>
  </tr>
</table>
<?
closedir($d);
?>
Merci pour votre aide