我在jssor中创建了一个库,幻灯片是通过读取目录并使用PHP脚本为每个图像编写div来制作的。在图像下方会显示一个标题,其中包含艺术家的名字(总是相同的),后面跟不带扩展名的文件名。
这是我到目前为止所做的:
<?
$dir = 'Photo/Paintings';
$files = scandir($dir);
sort($files);
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
echo '<div>
<img u="image" style="max-height:460px;" src="Photo/Paintings/'.$file.'" />
<img u="thumb" src="Photo/Paintings/'.$file.'" />';
$withoutExt = preg_replace('/\\.[^.\\s]{3,4}$/', '', $file);
echo '<div u="caption" style="position: absolute; top: 470px; left: 0px; height: 10px; text-align: center;">
ARTISTX - '.$withoutExt.'
</div>
</div>';
}
}
?>
这些图片应按特定顺序排列,因此我的想法是在每个文件名的开头添加一个数字,如#5-Picture of tree.jpg
。我的问题是,如何删除此标题中显示的#5
部分?
或者,有没有更好的方法来确定这些文件的顺序?我意识到现在我的想法甚至不能很好地工作,因为#1按字母顺序排在#11和#12之后,而不是#2。我可以通过使用字母1A,1B,1C,2A等组合来解决这个问题。
答案 0 :(得分:0)
您只能获得字符串的一部分:
$str = substr($str, 3);
或者您在-
显式之前删除了部分:
$ex = explode("-", $str);
unset($ex[0]);
$str = implode("-", $ex);
如果第一部分的字符数超过3个,则第二种方法会更好。
或者,有没有更好的方法来确定这些文件的顺序?我意识到现在我的想法甚至都不会很好用,因为#1按字母顺序排在#11和#12之后,而不是#2。我可以通过使用字母1A,1B,1C,2A等组合来解决这个问题。
使用此:
$myFiles = Array();
foreach($files as $file){
// ...
$myFiles[str_replace("#", "", explode("-", $file)[0]))] = $file;
}
ksort($myFiles);
foreach($myFiles as $file){
// display
}
答案 1 :(得分:0)
仅当文件名实际上以数字开头时才会生效:
$str = preg_replace('/^\\d+-/', null, $fileName);
不以#{number}-
开头的文件不会受到此剪裁过程的影响。
对于您的排序问题。先填一个0
。因此,请使用01
,02
,...依此类推99
。
<?php
。
答案 2 :(得分:0)
要回答你的第二个问题,你不必改为1A,2B ......有点像natsort natsort