内置函数在PHP中组合重叠的字符串序列?

Jam*_*mex 3 php string merge overlapping

PHP中是否有内置函数将2个字符串合并为1?

示例:

$string1 = 'abcde';
$string2 = 'cdefg';
Run Code Online (Sandbox Code Playgroud)

结合得到:abcdefg.

如果确切的重叠序列和位置是已知的,那么可以编写代码来合并它们.

TIA

Die*_*itz 6

我找到了substr_replace方法来返回有趣的结果.特别是在使用url字符串时.我刚写了这个函数.它似乎完全符合我的需求.默认情况下,该函数将返回最长的匹配项.

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;
}
Run Code Online (Sandbox Code Playgroud)

用于获得最大长度匹配的用法:

echo replaceOverlap("abxcdex", "xcdexfg"); //Result: abxcdexfg
Run Code Online (Sandbox Code Playgroud)

要获得第一个匹配而不是最后一个匹配,请调用以下函数:

echo replaceOverlap("abxcdex", "xcdexfg", “short”); //Result: abxcdexcdexfg
Run Code Online (Sandbox Code Playgroud)

要获取重叠的字符串,只需调用:

echo findOverlap("abxcdex", "xcdexfg"); //Result: array( 0 => "x", 1 => "xcdex" )
Run Code Online (Sandbox Code Playgroud)