如何在平面文件PHP中反转排序顺序?

时间:2015-02-10 09:33:46

标签: php sorting

我找不到反转显示使用此平面文件获取的文件的顺序的方法。我想要的是首先显示更高数字的图像。这可能很容易,但我无法弄清楚。 代码如下:

<table cellpadding="4" cellspacing="0" width="760">

                <?php
                    $dir   = 'img/';
                    $filetype = '*.*';
                    $allow = array('jpg','jpeg', 'JPEG', 'JPG', 'gif', 'GIF', 'png', 'PNG');
                    $files = glob($dir.$filetype);
                    $i=0;
                    $open = opendir($dir);

                    while (($file=readdir($open))!==false) {
                    $ext=str_replace('.', '', strrchr($file, '.'));
                    if (in_array($ext, $allow)) 
                    $list[$i++]=$file; }

                    $perPage= 5;
                    $total=count($list);
                    $pages=ceil($total/$perPage);
                    $thisPage=isset($_GET['pg'])?$_GET['pg']-1:0;
                    $start=$thisPage*$perPage;
                    $pageNumber= $thisPage+1;
                    $perRow= 1;
                    $imgCnt=0; 
                    for ($i=$start;$i<$start+$perPage;$i++) {

                    echo "<div class='item' 'hyphenate'>";

                    if (isset($list[$i])) {

                        echo "<figure>";

                        echo '<div class="photo">';
                        // Image
                        echo '<img src="'.$files[$i].'" alt="">';

                        echo "</div>"; // Photo

                            echo "<figcaption>";                    

                                // Caption goes here

                            echo "</figcaption>";       

                        echo "</figure>";           

                    echo "</div>";

                    }else {
                    echo "<td></td>";
                    }

                    $imgCnt+=1; 
                    if ($imgCnt%$perRow==0)
                    echo "</tr><tr>";
                    }
                    echo "</tr>";

                    closedir($open);
                ?>

3 个答案:

答案 0 :(得分:0)

PHP函数rsort(http://php.net/manual/en/function.rsort.php)应该可以解决问题。但是,您可以使用回调函数和PHP函数http://php.net/manual/en/function.usort.php(usort)创建自己的自定义排序

<?php
// function returns -1 if $a < $b, returns 1 if $a>$b and zero if equal
function mySortFunction($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    // next line should do the magic sorting. perhaps strip the numbers from the filename, convert to integer and then compare.
    return ($a < $b) ? -1 : 1;
}//mySortFunction

// call this function after your while loop 
usort($list, "mySortFunction");

?>

答案 1 :(得分:0)

您可以使用natsort()array_reverse()的组合。

your comment看起来我们需要剥离分隔符(_)才能使其正常工作。

例如:

$files = glob($dir.$filetype);
$files = array_map('removeSeperators', $files); //Remove _ to make XXYY one number so we can sort.
natsort($files); //Sort naturally. (lowest-highest)
$files = array_reverse($files, true); //Reverse the array. (highest-lowest)

function removeSeperators($element) {
   return str_replace("_", "", $element);
}

https://eval.in/283459

答案 2 :(得分:0)

正如你所指出的那样,我的解决方案就像在我的代码中添加$files = array_reverse($files);一样简单。谢谢!

您的img元数据格式化解决方案很好。我这样解决了:

        // Title    
        $title = substr($files[$i],strlen($dir),strpos($files[$i], '.')-strlen($dir)); // Fetch filename, ignore path and text since the '.'
        $title = str_replace( array( '%', '-'), " ", $title); // Replace symbols with a space
        $title = str_replace( array( '0', '1', '2' , '3', '4', '5', '6', '7', '8', '9', '_'), "", $title); // Replace numbers and '_' with nothing
        echo '<h2>'."". $title .'</h2>'; // Show title

        echo '<p>'; 
        $exif = exif_read_data($files[$i], 0, true); // Get Exif metadata from image
        echo "" .$exif['IFD0']['ImageDescription']. "\n"; // Filter to IFD0 and ImageDescription
        echo '</p>';