根据与另一个字符串的差异将更改应用于一个字符

时间:2011-04-03 10:15:29

标签: php function string diff

在PHP中,我有两个字符串:

$str1 = 'amare';

......和......

$str2 = 'laudare';

对于$ str2,还有一个额外的表格......

$form2 = 'laudant';

现在我想根据从$ str2到$ form2的变化生成$ form1($ str1):

laudare - > laudant =====> amare - > AMANT

你能帮我建立一个能做到这一点的功能吗?

<?php
function generateForm($str1, $str2, $form2) {
    // 1) get the shared part of $str2 and $form2: "lauda"
    // 2) extract the according part for $str1: "ama"
    // 3) get the ending which has been suffixed: "nt"
    // 4) add the ending from step 3 to the base from step 2: "amant"
    // 5) return the string from step 4
}
?>

如何在PHP中实现这一点?非常感谢提前!

3 个答案:

答案 0 :(得分:1)

在这里,但只有在最后一个字母改变时才有效:

function generateForm($str1, $str2, $form2) {
    $commonStr = '';
    for($i = 0;$i < strlen($str2); $i++){
        if($str2{$i} == $form2{$i}){
            $commonStr .= $str2{$i};
        }
        else
            break;
    }
    $suffix1 = substr($str2, strlen($commonStr));
    $suffix2 = substr($form2,strlen($commonStr));

    $str1common = substr($str1, 0, strlen($str1)-strlen($suffix1));

    return $str1common . $suffix2;
}

答案 1 :(得分:1)

function generateForm($str1, $str2, $form2) {
$p1=str_split($str2);
$p2=str_split($form2) ;
$i=0;
while($p1[$i]==$p2[$i])
{
  $i++ ;
}

$pre=strlen( substr($str2,$i));

$rep=substr($form2,$i);
return substr($str1,0,(strlen($str1)-$pre)).$rep;
}

这将有效但不是所有情况

答案 2 :(得分:0)

<?php

function generateForm($str1, $str2, $form2) {
$str2Ar = preg_split('//', $str2, -1);
$form2Ar = preg_split('//', $form2, -1);
$match = '';
    foreach($str2Ar as $key=>$c)
    {
        if($c == $form2Ar[$key])
        $match .= $c;
        else
        break;
    }
    $pre = substr($str1,0,3);
    $sufix = substr($form2,strlen($form2)-2,2);
    $return_form = $match.$sufix;
    $return_according = $pre.$sufix;
    return array($return_form,$return_according);

}

$str1 = 'amare';
$str2 = 'laudare';
$form2 = 'laudant';

$result = generateForm($str1, $str2, $form2) ;
    echo $result[0];//return form
    echo "<hr>";
    echo $result[1];//return according