Tri multiple avec répercution sur tableau associatif

arginine Messages postés 10 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 19 avril 2010 - 22 oct. 2005 à 14:34
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 24 oct. 2005 à 13:22
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

monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
22 oct. 2005 à 16:02
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 =)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 oct. 2005 à 13:22
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
?>
0
Rejoignez-nous