有谁知道有没有一种方法可以很容易地合并到路径?
/www/htdocs/v450687/server/jobs/bodymind/uploads
uploads/videoscontent/1/转到/www/htdocs/v450687/server/jobs/bodymind/uploads/videoscontent/1/
/www/htdocs/v450687/server/jobs/bodymind/uploads/videoscontent
uploads/videoscontent/1/snips转到/www/htdocs/v450687/server/jobs/bodymind/uploads/videoscontent/1/snips
/www/htdocs/v450687/server/jobs/bodymind/uploads/1/1
1/1/snips转到/www/htdocs/v450687/server/jobs/bodymind/uploads/videoscontent/1/1/snips
发布于 2020-02-11 18:18:08
解决方案:built in function to combine overlapping string sequences in php?
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;
}发布于 2020-02-11 18:18:54
据我所知,没有内置的方法可以做到这一点。以下是我的方法:
下面是一个示例:
$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
发布于 2020-02-11 18:48:47
您必须将路径分解为数组,合并它们,并删除重复项。你可以用不同的方法来完成,下面是一些例子:
$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;
}或
$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()。
$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;
}https://stackoverflow.com/questions/60166261
复制相似问题