Tri d'un tableau provenant d'une fonction récurcive

Likeun
Invité n'ayant pas de compte PHPfrance

23 sept. 2010, 11:53

Bonjour,
Tout est dans le titre,
J'ai une fonction récursive qui me permet de lister tous les fichiers d'un dossier et de ses sous dossiers. Tous ceci dans un tableau contenant le nom du fichier, et la date de modification du fichier.
Mais je n'arrive pas à trier ce tableau étant donné que c'est une fonction récursive ...
Avez-vous une idée?

Merci d'avance.

Likeun

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

23 sept. 2010, 11:57

Montre nous ce que tu as fais jusque là ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Likeun
Invité n'ayant pas de compte PHPfrance

23 sept. 2010, 13:04

<?
function ScanRepertoire($Directory)
{


  $MyDirectory = opendir($Directory) or die('Erreur');
	while($Entry = @readdir($MyDirectory)) {
		if(is_dir($Directory.'/'.$Entry)&& $Entry != '.' && $Entry != '..') 
		{

			ScanRepertoire($Directory.'/'.$Entry);

		}
		else {
		
if ($Entry != "." && $Entry != ".." && $Entry != "index.php") 
	{
$type = str_replace('.','',strstr($Entry, '.'));
$tab[] = array($Entry, filemtime($Directory.'/'.$Entry));
if (stristr($Entry, $_POST[recherche]) !== FALSE && ($_POST[recherche] != "" ))
{
	?>

//Affichage selon mes envie...
<?php
}
		
    }
	}
}
?></table><?php
  closedir($MyDirectory);
return($tab);


}
echo count($tab);
function cmp3($a,$b) {
    if ($a[1] == $b[1])
        return 0;
    return ($a[1] < $b[1]) ? -1 : 1;
	
usort($tab, "cmp");
}

ScanRepertoire('./biblesetoutils');

?>

Likeun
Invité n'ayant pas de compte PHPfrance

23 sept. 2010, 13:12

L'idée qui est derriere tout ça, c'est que je souhaite affiche les X derniers documents modifiés qui se trouve dans des dossiers, sous dossiers, et sous sous sous dossiers. Mais la fonction récursive me bloque mon tri.
Et malheuresement, je ne peux pas me passer de ses sous dossiers... ( sinon j'aurai enlevé la fonction de récursive et le tri aurait fonctionné ).

ViPHP
xTG
ViPHP | 7331 Messages

23 sept. 2010, 15:13

A la ligne 10 tu ne récupères pas le retour de ta fonction récursive, c'est donc tout à fait normal d'avoir des problèmes.
Tu ne fais aucune utilisation du return $tab.

Donc ton tableau ne pourra jamais être traité vu qu'il ne contient pas les sous-répertoires.

Likeun
Invité n'ayant pas de compte PHPfrance

23 sept. 2010, 15:41

êtes-vous sur ?
Car moi ce que je comprend de ce que j'ai voulu faire c'est si le fichier n'est pas un répertoire j'insére le nom et la date de modification dans $tab sinon si c'est un répertoire, je scanne ce que contient ce répertoire et donc j'insère les fichiers qui sont compris dedans toujours dans la même array non ?
Si ce n'est pas le cas, j'aimerai bien si possible que vous me proposer un code car je ne vois pas l'intérêt d'utiliser la fonction return à ce niveau là.
Je me trompe surement car je n'arrive pas à faire le tri, mais j'aimerai comprendre s'il vous plait.

En tout cas merci de m'avoir répondu, et de m'aider

ViPHP
xTG
ViPHP | 7331 Messages

23 sept. 2010, 18:46

$tab est une variable locale à la fonction, elle n'est en aucun cas globale.

Petit exemple :
function test($a)
{
  echo $a;
  if( $a < 2 )
    $b = test($a + 1);
  else
    $b = 0;
  echo $a;
  echo $b;
  $a = $a + 1;
  return $a;
}
test(0);
Résultat :
0 //a
//appel de test( 0 + 1)
  1 //a
  //appel de test( 1 + 1)
    2 //a
    2 //a
    0 //b
  1 //a
  3 //b
0 //a
2 //b
1 //retour de test(0)
En gros mon exemple est peut être mal foutu mais si tu t'y penches un peu tu verras que la modification de la variable $a n'est pas prise en compte quand on dépile les fonctions. Seul le return a une incidence sur la fonction appelante.

Likeun
Invité n'ayant pas de compte PHPfrance

24 sept. 2010, 10:07

Merci pour vos réponses, mais je n'y arrive pas. Tampis

ViPHP
xTG
ViPHP | 7331 Messages

24 sept. 2010, 10:10

Il est dommage d'abandonner pour si peu.
Si jamais tu reviens sur tes dires voici un merveilleux cours sur la récursivité que tu as tant de mal à comprendre : http://recursivite.developpez.com/