首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP合并两条路径-相对绝对

PHP合并两条路径-相对绝对
EN

Stack Overflow用户
提问于 2020-02-11 18:00:37
回答 3查看 181关注 0票数 0

有谁知道有没有一种方法可以很容易地合并到路径?

代码语言:javascript
复制
/www/htdocs/v450687/server/jobs/bodymind/uploads
uploads/videoscontent/1/

转到/www/htdocs/v450687/server/jobs/bodymind/uploads/videoscontent/1/

代码语言:javascript
复制
/www/htdocs/v450687/server/jobs/bodymind/uploads/videoscontent
uploads/videoscontent/1/snips

转到/www/htdocs/v450687/server/jobs/bodymind/uploads/videoscontent/1/snips

代码语言:javascript
复制
/www/htdocs/v450687/server/jobs/bodymind/uploads/1/1
1/1/snips

转到/www/htdocs/v450687/server/jobs/bodymind/uploads/videoscontent/1/1/snips

EN

回答 3

Stack Overflow用户

发布于 2020-02-11 18:18:08

解决方案:built in function to combine overlapping string sequences in php?

代码语言:javascript
复制
echo replaceOverlap("abxcdex", "xcdexfg"); //Result: abxcdexfg

function findOverlap($str1, $str2){
  $return = array();
  $sl1 = strlen($str1);
  $sl2 = strlen($str2);
  $max = $sl1>$sl2?$sl2:$sl1;
  $i=1;
  while($i<=$max){
    $s1 = substr($str1, -$i);
    $s2 = substr($str2, 0, $i);
    if($s1 == $s2){
      $return[] = $s1;
    }
    $i++;
  }
  if(!empty($return)){
    return $return;
  }
  return false;
}

function replaceOverlap($str1, $str2, $length = "long"){
  if($overlap = findOverlap($str1, $str2)){
    switch($length){
      case "short":
        $overlap = $overlap[0];
        break;
      case "long":
      default:
        $overlap = $overlap[count($overlap)-1];
        break;
    }     
    $str1 = substr($str1, 0, -strlen($overlap));
    $str2 = substr($str2, strlen($overlap));
    return $str1.$overlap.$str2;
  }
  return false;
}
票数 0
EN

Stack Overflow用户

发布于 2020-02-11 18:18:54

据我所知,没有内置的方法可以做到这一点。以下是我的方法:

  1. 将两条路径分解为一个数组,并将它们合并为重复项。

下面是一个示例:

代码语言:javascript
复制
$path_1 = '/www/htdocs/v450687/server/jobs/bodymind/uploads';
$path_2 = 'uploads/videoscontent/1/';
echo implode('/', array_unique(array_merge(explode('/', $path_1), explode('/', $path_2)), SORT_REGULAR));

输出:/www/htdocs/v450687/server/jobs/bodymind/uploads/videoscontent/1

票数 0
EN

Stack Overflow用户

发布于 2020-02-11 18:48:47

您必须将路径分解为数组,合并它们,并删除重复项。你可以用不同的方法来完成,下面是一些例子:

代码语言:javascript
复制
$path1 = '/www/htdocs/v450687/server/jobs/bodymind/uploads';
$path2 = 'uploads/videoscontent/1/';

print_r(pathToArray($path1, $path2));

function pathToArray($path1, $path2){
    foreach(explode('/', $path1) as $part){
        $output1[] = $part;
    }

    foreach(explode('/', $path2) as $part){
        $output2[] = $part;
    }

    $output = array_merge($output1, $output2);

    $output = array_unique($output);
    $output = implode("/",$output);
    return $output;
}

代码语言:javascript
复制
$path1 = '/www/htdocs/v450687/server/jobs/bodymind/uploads';
$path2 = 'uploads/videoscontent/1/';

echo implode('/', array_unique(array_merge(explode('/', $path_1), explode('/', $path_2)), SORT_REGULAR));

更新:我看到你已经更新了你的问题,所以我提出了我的答案。在这种情况下,要解决这个问题,您只需对每个数组使用array_unique()。

代码语言:javascript
复制
$path1 = '/www/htdocs/v450687/server/jobs/bodymind/uploads/1/1';
$path2 = '1/1/snips';

print_r(pathToArray($path1, $path2));

function pathToArray($path1, $path2){
    foreach(explode('/', $path1) as $part){
        $output1[] = $part;
    }

    foreach(explode('/', $path2) as $part){
        $output2[] = $part;
    }

    $output1 = array_unique($output1);
    $output2 = array_unique($output2);
    $output = array_merge($output1, $output2);

    //$output = array_unique($output);
    $output = implode("/",$output);
    return $output;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60166261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档