如何删除 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
之前放一个填充。所以使用 01
、02
、...等等直到 99
。
顺便说一句。不要使用短 PHP 标签。始终在 PHP 块的开头使用 <?php
。
要回答您的第二个问题,您不必更改为 1A、2B...有类似 natsort 的排序 natsort
我正在 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
之前放一个填充。所以使用 01
、02
、...等等直到 99
。
顺便说一句。不要使用短 PHP 标签。始终在 PHP 块的开头使用 <?php
。
要回答您的第二个问题,您不必更改为 1A、2B...有类似 natsort 的排序 natsort