如何在PHP中删除文件名的开头?

时间:2015-05-19 11:18:13

标签: php gallery jssor

我在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等组合来解决这个问题。

3 个答案:

答案 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。因此,请使用0102,...依此类推99

顺便说一下。不要使用简短的PHP标签。始终在PHP块的开头使用<?php

答案 2 :(得分:0)

要回答你的第二个问题,你不必改为1A,2B ......有点像natsort natsort