我有以下文件夹路径:
c:/data/2/some_string/ddd.jpg
c:/data/data/2/some_string/ddd.jpg
c:/data/some_string/ddd.jpg
我想永远得到" some_string / ddd.jpg"。 我怎样才能做到这一点?
我可以针对特定路径做这件事,但我需要更动态的东西
谢谢
答案 0 :(得分:1)
$somefile = 'c:/data/data/2/123132/some_string/ddd.jpg';
echo basename(dirname($somefile)) . '/' . basename($somefile);
输出:
some_string/ddd.jpg
它的工作原理如下:1)获取父文件夹的完整路径,2)获取该文件夹的文件名(因为文件夹是特殊类型的文件)。
它也适用于不存在的文件和文件夹,因为这些函数只处理路径字符串。
答案 1 :(得分:0)
您可以将带有explode的字符串拆分为数组 然后你可以循环它并将它与想要的路径进行比较。
<?php
$path = 'c:/data/2/123132/ddd.jpg';
$chunks = explode('/', $path);
/*
array(5) {
[0]=> string(2) "c:"
[1]=> string(4) "data"
[2]=> string(1) "2"
[3]=> string(6) "123132"
[4]=> string(7) "ddd.jpg"
}
*/
答案 2 :(得分:0)
<?php
$var1='c:/data/2/some_string/ddd.jpg';
$var2='c:/data/data/2/some_string/ddd.jpg';
$var3='c:/data/some_string/ddd.jpg';
$data=strrev($var1);
$newstr = substr($data, 0, strpos($data, '/', strpos($data, '/')+1));
$newstr=strrev($newstr);
echo $newstr;
无论字符串有多长,它总会返回你想要的部分
some_string/ddd.jpg
另一种方法是使用explode / implode:
<?php
$var1='c:/data/2/some_string/ddd.jpg';
$var2='c:/data/data/2/some_string/ddd.jpg';
$var3='c:/data/some_string/ddd.jpg';
$data=strrev($var1);
$test=explode('/',$data);
$newArray=array($test[0],$test[1]);
$newArray=implode('/',$newArray);
$data=strrev($newArray);
print_r($data);
两种方式都有相同的结果。你可以随意使用。
答案 3 :(得分:0)
使用常规表达式。
试试http://www.rexegg.com/regex-php.html 和https://regex101.com/
如果您只想从文件中提取父文件夹,可以使用此正则表达式模式:
\/([^\/]*)\/[^\/]*\..*
代码应为:
$subject='c:/data/2/123132/ddd.jpg';
$pattern='\/([^\/]*)\/[^\/]*\..*';
$success = preg_match($pattern, $subject, $match);
if ($success) {
echo "Match: ".$match[0]."<br />";
echo "Group: ".$match[1]."<br />";
}