2017-04-05 6 views
0

J'essaie d'afficher des images sur mon site Web avec php usort, de sorte que les nouvelles images doivent être en haut et le plus ancien en bas. J'ai essayé d'utiliser usort, mais ça ne marche pas et les images sont toujours affichées dans le sens inverse, les anciennes sont en haut et les nouvelles en bas. Quelque chose ne va pas avec mon code, ou pourquoi cela se passe-t-il? (Je l'ai lu tous les sujets ici à stackoverflow qui ont quelque chose en commun, mais je ne l'ai pas compris ce qui est faux.)usort par date de création ne fonctionne pas

J'utilise ce code:

$folder_path = 'posters/'; 

$num_files = glob($folder_path . "*.{JPG,jpg,gif,png,bmp}", GLOB_BRACE); 
usort($num_files, function($a, $b) { return filemtime($a) < filemtime($b); }); 

$folder = opendir($folder_path); 
+0

utilisation de la commande mysql par date ou l'identifiant desc il ordonnera que vous voulez –

+0

@ShafiqulIslam ne peut pas utiliser pour mysql par ordre de choses qui ne sont pas d'une base de données mysql ... – Svish

+0

vous avez raison et vérifiez ma réponse, j'espère que cela va résoudre votre problème –

Répondre

0

La fonction de comparaison doit retourner nombre entier inférieur, égal ou supérieur à zéro si le premier argument est considéré comme étant respectivement inférieur, égal ou supérieur à la seconde.

Vous renvoyez un booléen (vrai/faux). Essayez d'échanger le < avec un -. Et si ce que vous obtenez est l'inverse de ce que vous devriez avoir, échangez $a avec $b et il devrait le commander dans le bon sens.

+0

J'ai utilisé le '-' avant et j'ai aussi essayé d'échanger le' $ a' avec '$ b' mais je n'ai rien trouvé qui fonctionne, alors vous suggérez que ça ressemble à ceci ?: 'usort ($ num_files, fonction ($ a, $ b) {return filemtime ($ a) - filemtime ($ b); }); 'ou comme ceci:' usort ($ num_files, fonction ($ b, $ a) {return filemtime ($ a) - filemtime ($ b);}); '? – user7176800

+0

Quel que soit le type dans la bonne direction. "Rien trouvé qui fonctionne", de quelle manière? Qu'est-ce qui ne fonctionne pas? Comment ça ne marche pas? Qu'attendez-vous, cela n'arrive pas? – Svish

0

Vous pouvez utiliser la fonction filemtime() qui obtient l'heure de modification du fichier. Dans ce cas, vous obtiendrez toute l'ordre croissant de la liste d'images de sorte que vous souhaitez afficher la liste comme dernière modification, dans ce cas besoin d'inverser toute image en utilisant usort() fonction avec fonction personnalisée qui compare l'heure de modification, puis la lister.

<?php 
function latestImageProcess($compare1, $compare2) 
{ 
    $first_compare = filemtime($compare1); 
    $second_compare = filemtime($compare2); 

    if ($first_compare == $second_compare) { 
     return 0; 
    } 
    else if ($first_compare < $second_compare) { 
     return -1; 
    } 
    else { 
     return 1; 
    } 
} 

$images_list = glob("posters/*.*"); 
usort($images_list, "latestImageProcess"); 

for ($i = count($images_list) - 1; $i >= 0; $i--) { 
    $image_name = $images_list[$i]; 
    echo '<img src="' . $image_name . '" height ="400" title="'.$image_name.'"/><br />'; 
} 
?> 

espère que cela vous aidera et pour plus d'informations sur filemtime

http://php.net/manual/en/function.filemtime.php