8791 sujets

Développement web côté serveur, CMS

bonjour à tous ,

j'ai récupéré des fichiers selon une extension (mais pas important) ,
que j'ai ensuite mis dans un tableau à 2 dimension .
voici le code :

function Sort_By_IncExt() {
	// ouverture repertoire courant
    $inc_tab = array();
    $rep = dir($_SERVER['DOCUMENT_ROOT']."/articles/svg");
    while($inc_file = $rep->read()) {
    	$fil = basename ($inc_file,".inc.php");
			
			if($inc_file != "." && $inc_file != '..' && $inc_file != "index.php" && $inc_file == $fil.".inc.php") {
				// donne la liste de tous les fichier du repertoire
                // donné et UNIQUEMENT se terminant par .inc.php
                // ces fichier sont les articles inclus lors de 
                // l'appel d'un article via son URL 
                
                // mise des donnees dans un tableau 2 dimensions
                // clé : name, 0
                $inc_tab['name'][] = $inc_file;
                // clé : date , 1
                $inc_tab['date'][] = date ("F d Y H:i:s.",filemtime($_SERVER['DOCUMENT_ROOT']."/articles/svg/".$inc_file));
                // donne une matrice 
                //  | name | date |
                //  | *.inc.php | date de *.inc.php |
                // le tableau est retourner pour etre 
                // traiter par une autre fonction
                print_r($inc_tab);
			}
    }
    
}

tenez pas compte des commentaires j'ai fait un copier coller de mon fichier ...

Je vais bien entendu mettre le répertoire à analyser en paramètre de fonction , mais maintenant je désire trier ce tableau pour récupérer le fichier écrit (modifié)
le plus récemment ..

a ce propos sur le le site Manuel PHP :
a écrit :

filemtime renvoie la date de dernière modification du fichier filename , ou FALSE en cas d'erreur.
filemtime retourne l'heure d'écriture des blocs données d'un fichier

alors qu'un de mes bouquin("php5 avancé ") me donne 'filectime 'pour la creation et filemtime pour la modif ..

Je m'égare : je n'arrive pas à trouver la bonne méthode pour trier ce taleau.
Les infos ( pas celle de P.P.D.A.) semble m'indiquer qu'un tri avec sort() et le paramètre SORT_NUMERIC sera la bonne solution , mais quid de asort() (garde l'association clé-valeur) , et de ksort(tri par clé) ...

l'expérience me manque pour savoir laquelle utiliser .
Merci de votre aide .

ps: faites gaffe 'au bar du forum ", ils trollent les vieux Smiley lol
Modifié par kzone (19 May 2007 - 01:06)
Salut kzone Smiley cligne

Je pense qu'il faut d'abord modifier ta ligne
$inc_tab['date'][] = date ("[b]F d Y[/b] H:i:s.",filemtime($_SERVER['DOCUMENT_ROOT']."/articles/svg/".$inc_file));
par
$inc_tab['date'][] = date ("[b]Y m d[/b] H:i:s.",filemtime($_SERVER['DOCUMENT_ROOT']."/articles/svg/".$inc_file));
et plus loin faire :
array_multisort($inc_tab['date'], SORT_DESC, SORT_STRING,
                $inc_tab['name'], SORT_STRING, SORT_ASC);
pour voir le résultat :
for ($i = 0; $i < 5; $i++) {
	echo $inc_tab['date'] [$i].' - '.$inc_tab['name'] [$i]."<br>\n";
	}


A+ Smiley biggrin
salut Heyoan !!

pour le moment j'obtiens ce tableau , mais c'est un "peu" ce résultat que j'ai du mal lire (=> à comprendre)

J'avais vu cette méthode array_multisort() , mais vu que je ne comprennais déjà pas bien les mécanismes de bases sort , asort, ksort (et les autres Smiley ravi )

bon j'ai plus le temps maintenant , je testerai ce soir ...
merci pour les codes
re-bonjour ...

voilà ce que cela me donne en appliquant ces méthodes :
a écrit :

2007 05 14 18:41:07. - commencer_svg.inc.php
-
2007 05 18 00:39:27. - lesBases.inc.php
2007 05 14 18:41:07. - commencer_svg.inc.php
2007 05 18 00:39:27. - lesBases.inc.php
2007 05 14 18:43:52. - js_svg.inc.php


pas exactement ce que j'escomptais , mais il y a progression Smiley langue !
Mais il y a une coucougnette coincée dans le l'engrenage .. Smiley rolleyes
mon fichier comporte uniquement les 3 fichiers indiqués ... je ne comprends pas les doublons et les date 14 et 18 (!!) sont mélangées ... why why but why !

Est-ce que je ne devrais pas trier les valeur 'filemtime' sans transformation avec date() et ainsi trier une suite de nombres plus 'compréhensible' q'un tri de date .??

Et dans ce cas utiliser SORT_NUMERIC !??

Ps: Et dire que je dois passer après aux sessions et gestion de commentaires ..
Je le trouvais chouette mon site en Html dur et pur Smiley biggol
Modifié par kzone (18 May 2007 - 23:31)
Re'

voici le code que j'ai testé (avec 2 versions) et qui fonctionne très bien chez moi
<?php
$rep = "francophone/images";
$inc_tab = array();
$ar = array();
$dossier = glob($rep."/*.jpg");
foreach ($dossier as $filename) {
	$lastupdate = date ("Y m d H:i:s.",filemtime($filename));
    echo "$filename modifié le : $lastupdate<br />\n";
	$inc_tab['date'][] = $lastupdate;
	$inc_tab['name'][] = $filename;
	$ar[$lastupdate] = $filename;
}

// test array du type $ar($date) = $name
echo "<br><br>";
krsort ($ar);
foreach ($ar as $key => $val) {
   echo "$key = $val<br>\n";
}

// test array multidimensions
echo "<br><br>";
array_multisort($inc_tab['date'], SORT_DESC, SORT_STRING,
                $inc_tab['name'], SORT_STRING, SORT_ASC);
for ($i = 0; $i < 5; $i++) {
	echo $inc_tab['date'] [$i].' - '.$inc_tab['name'] [$i]."<br>\n";
	}
?>


Si ça peut t'aider Smiley cligne
.... ehhhh ! la tête encore au boulot sans doute , mais j'avais les méthodes comme instruction de la boucle while ...

et j'obtiens bien ce qui me semble etre le dernier fichier modifié de la liste
(j'ai testé en changeant filemtime par filectime , ce qui n'a rien changé à l'affiichage ... par sûr de tout comprendre ) ...

mais j'ai un peu de mal à comprendre 'la logique de ces tableaux multidimentionnels " ...

Je vais relire mes bouquins pour comprendre un peu mieux ce qui se passe dans ces tableaux Smiley biggrin
Mais je pense que le code est satisfaisant pour récupérer ces fichiers modifiés

Merci !!!

EDIT : la methode clé/valeur ( $ar($lastupdate) = $filemane) est telllement évidente dans mon cas (puisque je ne dois récupérer que le nom du dernier fichier modifié)
Mais je ne connaissait pas foreach ($ar as $key=> $val ) il y quelque minutes ...

muchas gracias Smiley prie => invitation pour les fêtes de Dax au mois d'aout Smiley saoul => demande le bar 'Basque'
Modifié par kzone (19 May 2007 - 01:38)
kzone a écrit :
invitation pour les fêtes de Dax au mois d'aout Smiley saoul => demande le bar 'Basque'
Smiley ravi Fais gaffe quand même : il vaut mieux me voir en avatar que dans un bar Smiley saouls
... c'est ce qu'il disent tous (quand ils peuvent encore) pendant les 'Ferias' Smiley lol

M'en vais roupiller un peu moi ... quoi que !
++