我在php中很新,从C ++来到这里,所以没有带字符串的stl库等等。
我正在寻找爆炸和内爆,想要实现这样的检查,就像我有相对路径或文件名,并想检查它是否包含一些单词,例如' -thumb'在延期之前或作为最后一次进入然后只存储两个变量,使用该后缀而不使用。抽象目录包含两个文件:test_file.png,test_file-thumb.png,因为目录遍历函数将作为文件名传递,或者其中之一,我想确保在那里的主文件,在所有检查完成后我这样称之为StoreBothFiles方法:
// this variables will comes from traverse function:
$file_name = __DIR__ ."test_file.png";
$postfix = "-thumb";
// explode will get name without extension add postfix and add extension
if ( is_file(file_name) && strpbrk($file_name, '-') == FALSE ) {
$name_noext = explode('.',$file_name, 2);
$file_thumb = $name_noext[0] . $postfix . "." . $photo_file_name_noext[1];
StoreBothFiles($file_name, is_file(file_thumb) ? $file_thumb : null);
}
但它适用于所有具有' - '在名称和这种方法不适应绝对路径,我做重构和好奇,也许可以有更有效的方式使用一些正则表达式或类似的东西以短的方式写它,而不会与周期和周期混乱substr和strlen?
答案 0 :(得分:1)
在PHP中,对于像这样简单的任务,字符串函数通常比正则表达式更受欢迎。
$image = 'myimage.jpg';
$ext = pathinfo($image, PATHINFO_EXTENSION); // jpg
$fname = pathinfo($image, PATHINFO_FILENAME); // myimage
$thumb = $fname . '-thumb.' . $ext; // myimage-thumb.jpg
echo substr(pathinfo($thumb, PATHINFO_FILENAME), -6, 6); // -thumb