2013-05-16 24 views
2

我有以下PHP脚本显示目录中的所有图像PHP展现在目录中的所有图像和排序最后修改

<?php 
$images = glob($dirname."*.jpg"); 
foreach($images as $image) { 
echo '<img src="'.$image.'" height ="400"/><br />'; 
} 
?> 

我想修改此,这样当您访问的页面也显示最后修改图像在上面。有人能帮助我,我会怎么做呢?

+1

参见此功能:http://php.net/manual/en/function.filemtime.php –

+0

重复的的[水珠() - 按日期排序](HTTP://计算器。 COM/q/124958/938236) –

回答

2

您可以使用filemtime()函数查找每个文件的修改日期。在循环中处理之前,这可用作使用uksort()对数组进行排序的键。

这会按照文件修改时间的升序排列数组,即最早mtime的数组。然后,您可以反转该数组,或者向后迭代它。

<?php 
    function mtimecmp($a, $b) { 
     $mt_a = filemtime($a); 
     $mt_b = filemtime($b); 

     if ($mt_a == $mt_b) 
      return 0; 
     else if ($mt_a < $mt_b) 
      return -1; 
     else 
      return 1; 
    } 

    $images = glob($dirname."*.jpg"); 
    usort($images, "mtimecmp"); 
    array_reverse($images); 

    foreach ($images as $image) { 
     echo '<img src="'.$image.'" height ="400"/><br />'; 
    } 
?> 

(向后遍历更有效率......)

// ... 
    usort($images, "mtimecmp"); 

    for ($i = count($images) - 1; $i >= 0; $i--) { 
     $image = $images[$i]; 
     echo '<img src="'.$image.'" height ="400"/><br />'; 
    } 
+0

传递filemtime()作为uksort()的回调将无法自行工作。需要一个小型的实用函数来解释结果并返回一个通知uksort()的整数,例如:“函数cmp_function [callback]应该接受由数组键填充的两个参数,比较函数必须返回一个小于,如果第一个参数被认为分别小于,等于或大于第二个参数,则等于或大于零。“ – Nathan

+0

@nathan:绝对是对的,这里是我让PHP和Python使用'key'关于排序函数的混合;在PHP中,它当然是指数组的键。谢谢。 –

+0

嗨@LucasJones,你的实现工作完美!无论如何,我可以直接与您联系以进一步跟进吗? – user1539206

0

你需要两个步骤来执行: (一)阅读目录内容,并注意最后修改信息 (B )使该结果

$images = glob($dirname . '*.jpg'); 
$mostrecent = 0; 
$mostrecentimg = null; 

// scan 
foreach ($images as $image) { 
    $imagemod = filemtime($image); 
    if ($mostrecent < $imagemod) { 
    $mostrecentimg = $image; 
    $mostrecent = $imagemod; 
    } 
} 

// display 
echo '<img src="' . $mostrecentimg . '" height="400"/><br />'; 
foreach($images as $image) { 

    // the most recent was already output above so skip remainder this iteration 
    if ($image == $mostrecentimg) continue; 

    echo '<img src="' . $image . '" height="400"/><br />'; 
} 
相关问题