PHP中是否有一个内置函数可以将2个字符串合并为1个字符串?
示例:
$string1 = 'abcde'; $string2 = 'cdefg';
合并以获得:abcdefg .如果确切的重叠序列和位置是已知的,则可以编写代码来合并它们。
abcdefg
z9gpfhce1#
我发现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" )
esbemjvw2#
可以使用substr_replace()和strcspn():
substr_replace()
strcspn()
$string1 = 'abcde'; $string2 = 'cdefgh'; echo substr_replace($string1, $string2, strcspn($string1, $string2)); // abcdefgh
ioekq8ef3#
不,没有内置函数,但是您可以轻松地自己编写一个,使用substr和一个循环来查看有多少字符串重叠。
substr
3条答案
按热度按时间z9gpfhce1#
我发现substr_replace方法返回有趣的结果。尤其是在处理URL字符串时。我刚刚写了这个函数。它似乎完全符合我的需要。默认情况下,该函数将返回最长的匹配。
获取最大长度匹配的用法:
要获取第一个匹配而不是最后一个匹配,请像这样调用函数:
要获取重叠字符串,只需调用:
esbemjvw2#
可以使用
substr_replace()
和strcspn()
:ioekq8ef3#
不,没有内置函数,但是您可以轻松地自己编写一个,使用
substr
和一个循环来查看有多少字符串重叠。