Frage

Gibt es eine Funktion in PHP gebaut, die zwei Strings in 1?

kombinieren würde

Beispiel: :

$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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top