在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中实现这一点?非常感谢提前!
答案 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