PHP中是否有一个内置函数可以将2个字符串组合成1个?
示例:
$string1 = 'abcde';
$string2 = 'cdefg';
结合得到:abcdefg
.
如果确切的重叠序列和位置已知,则可以编写代码来合并它们。
TIA
PHP中是否有一个内置函数可以将2个字符串组合成1个?
示例:
$string1 = 'abcde';
$string2 = 'cdefg';
结合得到:abcdefg
.
如果确切的重叠序列和位置已知,则可以编写代码来合并它们。
TIA
我发现 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;
}
获取最大长度匹配的用法:
echo replaceOverlap("abxcdex", "xcdexfg"); //Result: abxcdexfg
要获得第一个匹配而不是最后一个匹配,请调用如下函数:
echo replaceOverlap("abxcdex", "xcdexfg", “short”); //Result: abxcdexcdexfg
要获取重叠字符串,只需调用:
echo findOverlap("abxcdex", "xcdexfg"); //Result: array( 0 => "x", 1 => "xcdex" )
不,没有内置函数,但是您可以通过使用substr
和循环轻松地自己编写一个函数来查看重叠的字符串有多少。
可以使用substr_replace()
andstrcspn()
:
$string1 = 'abcde';
$string2 = 'cdefgh';
echo substr_replace($string1, $string2, strcspn($string1, $string2)); // abcdefgh