Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/10/2011, 08h55   #1
Membre du Club
 
Inscription : juin 2005
Messages : 154
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 154
Points : 52
Points : 52
Par défaut Tri incorrecte dans un array

Bonjour,

J'ai encore besoin de l'aide collégiale

Voila mon pb. j'essaie de trier des timestamp que je met dans un array, seulement le tri ne se fait pas, alors que si je place manuellement les time stamp ça fonctionne... Surement une erreur dans mon code mais je ne la cerne pas...
Merci d'avance.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
<?php  
$rep = 'etc/';
$dir = opendir($rep);
while ($f = readdir($dir))
if(is_file($rep.$f)) 
{
$tri=filectime($rep.$f).",";
$donnees = explode(',', $tri);
arsort($donnees);
foreach ($donnees as $val) {
  echo $val."<br />";
}
}
closedir($dir);
?>
Avec ce code le tri ne s'opère pas correctement...

De cet façon la oui :
Code :
1
2
3
4
5
6
7
8
9
10
 
 
 
<?php
$tableau = array(1318239097,1318317607,1318239102,1318239110);
arsort($tableau);
foreach ($tableau as $val) {
    echo $val."<br />";
}
?>
azorol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 09h26   #2
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 808
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 808
Points : 1 523
Points : 1 523
Un concaténation des timestamp des inodes ainsi qu'un tri et un affichage en dehors de la boucle de parcours des fichiers devrait t'apporter quelque chose de mieux.

Actuellement tu récupères un fichier, tu prends son timestamp, tu le tries avec lui même, tu l'affiches. Puis tu repars de zéro avec un nouveau fichier.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 09h33   #3
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 789
Points : 35 789
Déjà, en indentant ton code et en fermant les accolades de tes boucles, on pourrait y voir plus clair...

Ensuite,
Code :
1
2
$tri=filectime($rep.$f).",";
$donnees = explode(',', $tri);
C'est quoi l'intérêt franchement ?
Code :
$donnees[] = filectime($rep.$f);
ce serait pas plus simple et surtout plus logique ?
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 12h02   #4
Membre du Club
 
Inscription : juin 2005
Messages : 154
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 154
Points : 52
Points : 52
bin justement je patauge la... pour ça que je demande de l'aide...

J'ai fais des recherches sur le web pour trouver une solution pour trier mes fichiers par date, mais ça ne donne rien, pour ça que j'essaie de trouver une solution, et essayant de trouver un code qui fonctionne.
azorol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2011, 13h54   #5
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 789
Points : 35 789
Tu as une raison particulière pour utiliser arsort() ?
Parce que sort() me semble quand même plus approprié...
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 08h56   #6
Membre du Club
 
Inscription : juin 2005
Messages : 154
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 154
Points : 52
Points : 52
J'utilise arsort() pour le tri décroissant.
azorol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 09h03   #7
Membre du Club
 
Inscription : juin 2005
Messages : 154
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 154
Points : 52
Points : 52
[QUOTE=Bovino;6291177]
Code :
1
2
$tri=filectime($rep.$f).",";
$donnees = explode(',', $tri);
C'est quoi l'intérêt franchement ?
QUOTE]

L'interet est de séparer lesdonnées qui ressemble à ça :
(1318317607131823911013182391021318239097)
en ça :
(1318317607,1318239110,1318239102,1318239097)

pour les traiter dans l'array et les trier.
azorol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 09h35   #8
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 808
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 808
Points : 1 523
Points : 1 523
Sauf que $tri est toujours réécrasé, donc tu n'as jamais un array avec toutes les valeurs.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 10h13   #9
Membre du Club
 
Inscription : juin 2005
Messages : 154
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 154
Points : 52
Points : 52
bon j'ai refais le code différrament mais par contre ça ne trie pas...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<?php  
$rep = 'etc/';
$dir = opendir($rep);
while ($f = readdir($dir))
if(is_file($rep.$f)) 
{
$tableau = array(filectime($rep.$f));
arsort($tableau);
foreach ($tableau as $val) {
    echo $val."<br />";
}
}
closedir($dir);
?>
azorol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 11h32   #10
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 808
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 808
Points : 1 523
Points : 1 523
filectime() te renvoie le timestamp sur un seul fichier tu en es bien conscient ?
Auquel cas ton array ne contient qu'une seule valeur.
Tu tries donc un tableau comportant une seule valeur.
A la prochaine itération de la boucle, tu réécrases ton array avec le timestamp du fichier parcouru. Et tu refais donc encore un tri sur un tableau comportant un seul timestamp.

Comme on te l'a déjà dit, il faut créer ton tableau dans la boucle while, puis quand elle se termine faire le tri et l'affichage.
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 11h35   #11
Membre du Club
 
Inscription : juin 2005
Messages : 154
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 154
Points : 52
Points : 52
bon...

J'ai trouvé un code que j'ai adapté à mes besoin (bien loin du mien ^^).

Merci à tous pour vos aides.

voila le code si ça peut en aider d'autres :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
<?php
$path = 'etc/';// Listage d'un répertoire $path
if ($dir = @opendir($path)) {// ouverture du dossier 
    while($file = readdir($dir)) { // lecture d'une entrée 
	if($file != '.' && $file != '..' && $file != 'liste.php') {
        //création d'un tableau à 2 colonnes : nom + date fichiers 
        $tab[] = array($file, filemtime($path.$file));  
        // 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");
 
echo "<table>";
foreach($tab as $elem) {
    //formatage de la date avec mktime() selon le format retourné par filemtime()
    echo "<tr><td><a href=".$path.$elem[0].">".$elem[0]."</a></td><td>".date("d-m-Y H:i:s",$elem[1])."</td></tr>"; 
}
echo "</table>";
 
?>
azorol est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h55.


 
 
 
 
Partenaires

Hébergement Web