我找不到反转显示使用此平面文件获取的文件的顺序的方法。我想要的是首先显示更高数字的图像。这可能很容易,但我无法弄清楚。 代码如下:
<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);
?>
答案 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);
}
答案 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>';