有两个变量:
$string1 = "Source for replace";
$string2 = "String {Word2} replace";
我需要将第二个变量中的 {Word 2} 替换为第一个常量中的相应单词(第二个单词为 - for )。如果 {Word 2} ,被替换的单词应使用大写字母,如果 {word} - 则应使用小写字母。
答案 0 :(得分:0)
此解决方案似乎按照您的描述进行。
$string1 = "Source for replace";
$string2 = "String {Word2} replace";
//This will separate the string based on spaces
$arr1 = explode(' ', $string1);
$arr2 = explode(' ', $string2);
//Check the arrays are the same size
if( sizeof( $arr1 ) != sizeof( $arr2 ) ){
echo "Your arrays are not the same size. This will cause error. Stop.";
die();
}
//Find the occurence of {word2} in array 2
if( in_array('{word2}', $arr2) !== false ){
$arr2key = array_search('{word2}', $arr2);
} else {
$arr2key = array_search('{Word2}', $arr2);
}
//Replace the key in array 2 with the corresponding key from array 1
$arr2[$arr2key] = $arr1[$arr2key];
//Join array 2 back together again with spaces.
$string2 = implode(' ', $arr2);
echo $string2;
此代码将使用第一个句子中的相应单词替换第二个字符串中的{word2}或{Word2},无论位于何处。如果两个句子的长度不同,则会出现错误,程序将停止。
将来,当您提出问题时请更具体,并确保包含您已编写的任何代码。
答案 1 :(得分:0)
我使用preg_match来查找" {word}"它有多少数字。
然后我爆炸第一个字符串并使用str_replace并替换" {word}"分解字符串的索引减去1
我假设你想计算人类而不是数组,如果我错了就删除-1。
$string1 = "Source for replace";
$string2 = "String {Word2} replace";
Preg_match("/(\{word(\d+)\})/i", $string2, $matches);
$arr =explode(" ", $string1);
$str = str_replace($matches[1], $arr[$matches[2]-1], $string2);
Echo $str; // String for replace
如果字数高于$ string1中的字数,则可能会发出通知,但您可以通过以下方式解决:
$arr =explode(" ", $string1);
If($matches[2] <= count($arr)){
$str = str_replace($matches[1], $arr[$matches[2]-1], $string2);
Echo $str;
}Else{
Echo "there is no index " . $matches[2] . " in $string1";
}
如果需要
答案 2 :(得分:0)
我很无聊:
$words = explode(' ', $string1);
$result = preg_replace_callback('/\{(word(\d+))\}/i',
function($m) use($words) {
if($m[2] > count($words)) { return $m[0]; }
if($m[1][0] == strtoupper($m[1][0])) { return ucfirst($words[$m[2]-1]); }
return lcfirst($words[$m[2]-1]);
}, $string2);
Word
/ word