in Funktion zu kombinieren überlappende String-Sequenzen in PHP gebaut?
-
05-10-2019 - |
Frage
Gibt es eine Funktion in PHP gebaut, die zwei Strings in 1?
kombinieren würdeBeispiel: :
$string1 = 'abcde';
$string2 = 'cdefg';
Kombinieren Sie erhalten:. abcdefg
Wenn die genauen überlappende Sequenz und die Position bekannt, so ist es möglich, einen Code zu schreiben, um sie zu verschmelzen.
TIA
Lösung
Es ist möglich, unter Verwendung von substr_replace()
und strcspn()
:
$string1 = 'abcde';
$string2 = 'cdefgh';
echo substr_replace($string1, $string2, strcspn($string1, $string2)); // abcdefgh
Andere Tipps
Ich fand die substr_replace Methode lustig Ergebnisse zurückzukehren. Vor allem, wenn mit URL-Strings arbeiten. Ich schrieb diese Funktion. Es scheint perfekt für meine Bedürfnisse zu arbeiten. Die Funktion wird die längste mögliche Übereinstimmung der Standardeinstellung zurück.
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;
}
Verwendung der maximalen Länge Spiel zu bekommen:
echo replaceOverlap("abxcdex", "xcdexfg"); //Result: abxcdexfg
Um das erste Spiel statt des letzten Spiels rufen Sie die Funktion wie diese:
echo replaceOverlap("abxcdex", "xcdexfg", “short”); //Result: abxcdexcdexfg
Um die überlappende Zeichenfolge rufen Sie einfach:
echo findOverlap("abxcdex", "xcdexfg"); //Result: array( 0 => "x", 1 => "xcdex" )
Nein, es gibt keine eingebaute Funktion, aber man kann man sich leicht selbst schreibt von substr
und mit einer Schleife, wie viel von den Saiten zu sehen, dass sie überlappen.