在PHP中拆分和细分文件夹路径的一部分

时间:2017-10-18 11:09:06

标签: php string

我有以下文件夹路径:

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"。 我怎样才能做到这一点?

我可以针对特定路径做这件事,但我需要更动态的东西

谢谢

4 个答案:

答案 0 :(得分:1)

使用dirnamebasename的简单组合:

$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.htmlhttps://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 />"; 
}