【问题标题】:Sort image files in recent order按最近的顺序对图像文件进行排序
【发布时间】:2015-02-14 08:38:52
【问题描述】:

问了这个,但仍然没有得到适合这个的正确代码。我不想更改代码的原因是分页系统有效。

我尝试了arsortrsort 和许多其他排序功能,但图像仍然没有显示我目录中的最近图像。

<?php
$page = "";
$record_count = 100;
$dir = ('uploaded/');
$offset = ($page-1)*$record_count;
$files = glob("uploaded/*.*");
$files_filter  = array(arsort($files,$record_count));//made sorting changes here
$images = array(arsort(glob($dir . '*.*', GLOB_BRACE)));

$latestimage = $images[0];

    $large = '';  
    $allow = array('jpg','jpeg','gif','png', 'JPEG', 'JPG','GIF','PNG'); 


    $i=0; 
    $open = opendir($dir); 
    // get each filename from directory 
    while (($file=readdir($open))!==false) { 
        // get extension 
        $ext=str_replace('.', '', strrchr($file, '.')); 
        // does it have a valid extension 
        if (in_array($ext, $allow))  
          $list[$i++]=$file; // store valid filename in array. use numerical indexing as makes it easier to display paginated images later 
    } 

    $perPage=20; // number of images to show per page 
    $total=count($list); // total number of images to show 
    $pages=ceil($total/$perPage); // number of pages is the number of images divided by how many per page 

    $thisPage=isset($_GET['pg'])?$_GET['pg']-1:0; // did user select a specific page? Note, pages on web are counted from 1 (not zero) so must subtract 1 for correct indexing 
    $start=$thisPage*$perPage; // calculate starting index into list of filenames 

    $perRow=2; // how many images to be shown on each row 

    // display quick index to pages. all pages except current page output as a link 
    print "Page "; 
    for ($i=0;$i<$pages;$i++) 
      if ($i==$thisPage) 
        print "&nbsp;".($i+1); 
      else 
        print "&nbsp;<a href='?pg=".($i+1)."'>".($i+1)."</a>"; 

    print "<tr>"; 
    $imgCnt=0; // used to count number of images displayed and hence whether to wrap page. note, could use "for" index $i but this is computationally quicker 
    for ($i=$start;$i<$start+$perPage;$i++) { 
      // may be too few images to fill page, so check if we have a valid array index. if we don't output empty table cell so fussy browsers 
      // don't mis-display table due to missing cells 
      if (isset($list[$i])) 
        print "<td><a target='_new' href='$dir$large{$list[$i]}'><img  style='height:180px;width:180px; border:2px solid black;  margin:20px 0px 10px  10px; *margin:10px 0px 10px 20px;' style='border-color:#000000 ' border='1' src='$dir{$list[$i]}'></a></td>"; 
      else 
        print "<td></td>"; 

      $imgCnt+=1; // increment images shown 
      if ($imgCnt%$perRow==0) // if image count divided by number to show per row has no remainder than it's time to wrap 
        print "</tr><tr>"; 
    } 
    print "</tr>"; 

    closedir($open); 
?> 

【问题讨论】:

    标签: php image sorting directory


    【解决方案1】:

    你应该在修改时间索引你的列表,并在你想显示它们时对你的数组进行切片。

    更新:你应该使用krsort

    // the paths
    $dir     = '/var/www/uploads/';
    $urlPath = 'http://localhost/uploads/';
    
    $allow   = array('jpg','jpeg','gif','png', 'JPEG', 'JPG','GIF','PNG');
    $open    = opendir($dir); 
    
    while( $file = readdir( $open ) ){
    
      $ext = strtoupper( pathinfo( $file, PATHINFO_EXTENSION ) );
    
      if( in_array( $ext, $allow ) ){
    
        $modifyTime = filemtime( $dir . $file );
        $list[ $modifyTime ] = $file;
    
      }
    }
    
    # reverse sort on key
    krsort( $list );
    
    $perPage  = 20;
    $total    = count($list);
    $pages    = ceil($total/$perPage);
    $thisPage = isset($_GET['pg'])?$_GET['pg']-1:0;
    $start    = $thisPage*$perPage;
    
    echo "Page "; 
    
    // show pages
    for ($i=0;$i<$pages;$i++):
    
      if ($i==$thisPage) :
        print "&nbsp;".($i+1); 
      else :
        print "&nbsp;<a href='?pg=".($i+1)."'>".($i+1)."</a>"; 
      endif;
    
    endfor;
    
    // show images
    $items = array_slice( $list, $start, $perPage );
    foreach( $items as $image ){
      echo "<br/> " . $image . "<br/>";
      echo "<a target='blank' href='" . $urlPath . $image . "'><img width='100' height='100' src='" . $urlPath . $image . "'/></a>";
      echo "<br/>";
    }
    
    closedir($open); 
    

    阅读更多关于array_slicekrsort

    【讨论】:

    • 显示了一些错误,并且一张图像也没有显示,但图像的其余部分已找到并且似乎分类不同
    • 它的分类不同,但最近的图片没有显示
    • @Eddie_ 使用的是arsort 而不是krsort。试试这个更新的代码
    • 它有效,我只是希望图像是可点击的,但无论如何谢谢
    • @Eddie_ 你可以用&lt;a&gt; 标签包裹&lt;img&gt; 标签,它们将是可点击的:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多