Tri multiple avec répercution sur tableau associatif

Signaler
Messages postés
10
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
19 avril 2010
-
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
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:


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 IMAGE !!!
(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:


<?


// 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);

?>


Par avance Merci beaucoup,



Francis

2 réponses

Messages postés
420
Date d'inscription
vendredi 28 novembre 2003
Statut
Membre
Dernière intervention
20 mars 2006

C'est normal, $files['image'] et $files['dateimage'] sont deux tableaux qui n'ont aucun lien entre eux.

Je te conseille plutot de faire un tableau de ce style :

Array(

"2000-12-26 05:08:08" => 94.jpg

"2005-08-27 17:39:41" => 93.jpg

"2005-09-04 18:24:09" => 92.jpg

"2005-09-04 18:29:43" => tata.jpg

"2005-09-04 18:29:44" => toto.jpg

);



en remplaçant :

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

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



par :

$files[$dateimage] = $filename;



(La probabilité que deux image aient la même date de modification est infime :) )



Ainsi quand tu rangeras les clefs, valeurs suivront =)
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
25
Hello,

c'est à mon sens la meilleure solution.
Après, si tu veux afficher (ou modifier) ton $tableau['image'] en fonction de ton $tableau['dateimage'], il a une solution, mais c'est lourd :

<?php
$tab = array (
'image' => array (
'toto.jpg',
'tata.jpg',
'92.jpg',
'93.jpg',
'94.jpg'
),
'dateimage' => array (
'2000-12-26 05:08:08',
'2005-08-27 17:39:41',
'2005-09-04 18:24:09',
'2005-09-04 18:29:44',
'2005-09-04 18:29:43'
)
);


asort ($tab['dateimage']);
?>

<?php
foreach ($tab['dateimage'] as $clef => $dump) {
echo $tab['image'][$clef], '
';
}
?>

<?php
?>