TRI multiple sur tableau associatif

arginine
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 14:25

Bonjour,

j'ai "crée" une petite fonction qui permet de lister les fichier jpg d'un dossier puis de créer un tableau associatif comprenant deux colonnes (IMAGE) et (DATEIMAGE) dans lequelles sont stockés le nom du fihier jpg et la date de ce dernier (via les infos exif).

Avec array_multisort j'arrive bien à trier chacun l'un ou l'une colonne du tableau mais ce que je n'arrive pas c'est de trier une collone (DATEIMAGE) et de faire en sorte que ce tri AFFECTE aussi l'autre colonne (IMAGE) ...

En résumé, comment faire pour trier un tableau associatif sur une colonne et que le résultat du tri AFFECTE AUSSI l'autre colonne ....


Un print_r du tableau me donne ca:

Code : Tout sélectionner

Array ( [image] => Array ( [0] => toto.jpg [1] => tata.jpg [2] => 92.jpg [3] => 93.jpg [4] => 94.jpg ) [dateimage] => Array ( [0] => 2000-12-26 05:08:08 [1] => 2005-08-27 17:39:41 [2] => 2005-09-04 18:24:09 [3] => 2005-09-04 18:29:43 [4] => 2005-09-04 18:29:44 ) )

La colonne DATEIMAGE est bien triée mais aucune répercution n'a eu lieu sur la colonne DATEIMAGE !!!
(ex: la date de toto.jpg est 2005-09-04 18:29:44 et j'aurais donc aimé a faire en sorte que le nouvel indice de toto.jpg soit 4 et non pas 0)....


Ci joint le code de ma fonction:
<pre><?

// Fonction de scan du repertoire
function scandir($dirstr)
{$files = array();
 $fh = opendir($dirstr);
 while (false !== ($filename = readdir($fh)) )
 {
 if ( $filename != "." && $filename != ".." && eregi(".jpg", $filename) )
 {
	// Lecture des infos EXIF et determination de la date/heure de l'image
	$exif = exif_read_data("./thumbnails/".$filename);
	if(empty($exif['DateTime'])) {$dateimage = date("Y-m-d H:i:s", filemtime($dirstr."/".$filename));}
	else
	{ 
	$dateimage1 = $exif['DateTime'];
	// Formqtqge date/heure
	$dateimage_raw1 = explode(' ',$dateimage1); 
	$dateimage = str_replace(':','-',$dateimage_raw1[0]).' '.$dateimage_raw1[1];
	}

$files['image'][] = $filename;
$files['dateimage'][] = $dateimage;

 }
 }
 closedir($fh);
 array_multisort($files['dateimage'] , SORT_ASC );

 return $files;
}
 
$listing_dossier=scandir("./thumbnails");
 print_r ($listing_dossier);
 
?>
</pre>

Par avance Merci beaucoup,


Francis

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 oct. 2005, 17:56

SAlut essaie en faissant un tri sur les 2 sous tableaux:
array_multisort($files['dateimage'], SORT_ASC, $files['image'], SORT_ASC);

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 1885 Messages

22 oct. 2005, 20:00

Idéalement, il aurait fallu que tu construises ton tableau ainsi:
$files[] = array(
    'image' => $filename,
    'dateimage' => $dateimage
);
Ainsi chaque ligne de ton tableau représente une image et possède ses propres informations. Tu aurais pu essayer la méthode proposée par le manuel:
http://www.php.net/manual/fr/function.a ... tisort.php
Example 3. Sorting database results
La programmation est l'expression de la poésie d'un programmeur
Génération PHP