Php 根据一个字符串与另一个字符串的差异对其应用更改

Php 根据一个字符串与另一个字符串的差异对其应用更改,php,function,string,diff,Php,Function,String,Diff,在PHP中,我有两个字符串: $str1 = 'amare'; 。。。而且 $str2 = 'laudare'; 对于$str2,还有一个额外的表单是 $form2 = 'laudant'; 现在,我想根据从$str2到$form2的更改生成$form1(对于$str1): 劳德雷->劳德兰===>amare->amant 你能帮我建立一个函数吗 <?php function generateForm($str1, $str2, $form2) { // 1) get the

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

$str1 = 'amare';
。。。而且

$str2 = 'laudare';
对于$str2,还有一个额外的表单是

$form2 = 'laudant';
现在,我想根据从$str2到$form2的更改生成$form1(对于$str1):

劳德雷->劳德兰===>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
}
?>

给你,但它只在最后一个字母发生变化时起作用:

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;
}
function generateForm($str1、$str2、$form2){
$commonStr='';
对于($i=0;$i

这会起作用,但并非所有情况下都会起作用

当然,您最好尝试找到一个真正的拉丁语解析器,而不是拼凑出一个过于简单的规则,该规则无论如何只能在某些情况下起作用谢谢您的评论。正如我现在决定采用半自动方法一样,这正是我所需要的;)但你是对的:对于自动拉丁语解析来说,这是没有用的。在这种情况下,你不能简单地检查第一个共轭不定式“are”结尾并替换为“ant”。。。或者将变位传递给函数,而不是将另一个第一变位动词的不定式用作操纵的一部分,当然,这也是可能的。但我想为用户提供一个选项列表,用户可以在其中选择单词的词形变化方式,例如“laudare的词形变化类似于……[amare,videre,regere]”。然后用户选择一个选项,单词将根据所选单词进行屈折。感谢您的努力和快速回复,但这对我不起作用。它给出了错误的结果。非常感谢你,蒙塔瑟!:)由于您的功能运行良好,而且是更快的解决方案(2.18秒,100000次运行时为3.09秒),因此您的答案是最好的。我忘了提到:您的解决方案非常短-非常棒:)谢谢您的回答:)它运行良好。但不幸的是,我不得不选择一个最好的答案。由于Muntasir的解决方案速度更快(2.18秒,100000次跑步为3.09秒),我选择了他的答案。但再次感谢!
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;
}
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;
}