3

2つの文字列を1つに結合するPHPの組み込み関数はありますか?

$string1 = 'abcde';
$string2 = 'cdefg';

組み合わせると、次のようになりますabcdefg

正確に重複するシーケンスと位置がわかっている場合は、それらをマージするコードを記述できます。

TIA

4

3 に答える 3

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;
}

最大長の一致を取得するための使用法:

echo replaceOverlap("abxcdex", "xcdexfg"); //Result: abxcdexfg

最後の一致ではなく最初の一致を取得するには、次のように関数を呼び出します。

echo replaceOverlap("abxcdex", "xcdexfg", “short”); //Result: abxcdexcdexfg

重複する文字列を取得するには、次のように呼び出します。

echo findOverlap("abxcdex", "xcdexfg"); //Result: array( 0 => "x", 1 => "xcdex" )
于 2011-12-05T18:13:37.323 に答える
-1

とを使用して可能substr_replace()ですstrcspn()

$string1 = 'abcde';
$string2 = 'cdefgh';

echo substr_replace($string1, $string2, strcspn($string1, $string2)); // abcdefgh
于 2010-05-31T21:32:30.290 に答える
-1

いいえ、組み込み関数はありませんがsubstr、ループを使用して自分で簡単に記述して、重複する文字列の量を確認できます。

于 2010-05-31T19:01:15.470 に答える