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

How to remove beginning of filename in PHP?

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

您只能获取字符串的一部分:

$str = substr($str, 3);

或者您删除 - 显式之前的部分:

$ex = explode("-", $str);
unset($ex[0]);
$str = implode("-", $ex);

如果第一部分可以超过 3 个字符,则第二种方法更好。

Alternatively, is there a better way to determine the order of these files? I realize now my idea wouldn't even work very well since #1 would alphabetically be followed by #11 and #12 instead of #2. I could maybe work around this by using a combination with letters 1A, 1B, 1C, 2A, etc.

使用这个:

$myFiles = Array();
foreach($files as $file){
  // ...
  $myFiles[str_replace("#", "", explode("-", $file)[0]))] = $file;
}
ksort($myFiles);

foreach($myFiles as $file){
  // display
}

这仅在文件名实际以数字开头时才生效:

$str = preg_replace('/^\d+-/', null, $fileName);

不以 #{number}- 开头的文件将不受此定制过程的影响。

针对你的排序问题。在0之前放一个填充。所以使用 0102、...等等直到 99

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

要回答您的第二个问题,您不必更改为 1A、2B...有类似 natsort 的排序 natsort