提取和合并不同位置之间的字符串
Extract and merge strings between different positions
我正在努力让它发挥作用。我想在给定位置之间替换句子的某些部分,然后显示带有更改的完整句子。使用以下代码,我可以进行更改,但我不知道如何将句子的其余部分放在一起。
我有两个数组,一个是女性名字出现的位置,另一个是男性名字。当女人在间隔之间的男人之前时,代码将代词 "his" 替换为 "her"。我需要做的最后一件事是用所做的更改重建句子,但我不知道如何提取句子的其余部分(结果,在示例中,是从位置 0 到 20(Maria her dress but)和 36到 51(Lorena 她的狗),但我需要从 20 到 36(Peter his jeans)和 51 到最后(Juan his car)提取以将它们合并到它们的位置。
结果应该是:"Maria her dress but Peter his jeans Lorena her dog Juan his car"。我将不胜感激,我一直在寻找其他类似的问题,但一无所获。
<?php
$womenpos = array("0","36"); //these arrays are just examples of positions
$menpos = array("20","51"); //they will change depending on the sentence
$sentence = "Maria his dress but Peter his jeans Lorena his dog Juan his car";
echo $sentence."\n";
foreach ($womenpos as $index => $value) {
$value2 = $menpos[$index];
if($value < $value2) {
echo "\nWoman(" . $value . ") is before man(" . $value2 . ")\n";
$end = ($value2 - $value);
$improved = str_replace(' his ', ' her ',
substr($sentence, $value, $end));
echo $improved."\n";
} else {
$improved = "Nothing changed";
echo $improved;
}
}
这对问题的处理方式不同,但我想知道它是否会提供您正在寻找的解决方案:
$sentence = "Maria his dress but Peter his jeans Lorena his dog Juan his car";
$women = array ("Maria", "Lorena");
$words = explode (" ", $sentence);
for ($i=0; $i< sizeof($words); $i++) {
if ($words[$i] == "his" && in_array($words[$i-1], $women)) {
$words[$i] = "her";
}
}
print (join(" ", $words));
这会逐字逐句;如果前面的单词在 $women 数组中,而当前单词是 "his",它会将单词更改为 "her"。然后它按顺序吐出所有的单词。
这是否满足您的需求,还是您真的想要一个复杂的字符串定位答案?
好的,这个怎么样:
$womenpos = array("0","36");
$menpos = array("20","51");
$bothpos = array_merge($womenpos,$menpos);
sort ($bothpos);
print_r($bothpos);
$sentence = "Maria his dress but Peter his jeans Lorena his dog Juan his car";
echo $sentence."\n";
for ($i = 0; $i<sizeof($bothpos); $i++) {
$start = $bothpos[$i];
if ($i ==sizeof($bothpos)-1) {
$end = strlen($sentence);
}
else {
$end = $bothpos[$i+1];
}
$length = $end-$start;
$segment = substr($sentence, $start, $length);
if (in_array($start, $womenpos)) {
$new_segment = str_replace (' his ', ' her ', $segment);
}
else { $new_segment = $segment; }
$improved .= $new_segment;
print "<li>$start-$end: $segment : $new_segment </li>\n";
}
print "<p>Improved: $improved</p>";
这结合了男性和女性的位置数组,将每一段文本都视为可能有错误的文本。如果那段文本从 womenpos 点之一开始,那么它将 'his' 更改为 'her'。如果不是,它就不管它了。
这是否让您朝着想要的方向前进?希望如此!
我正在努力让它发挥作用。我想在给定位置之间替换句子的某些部分,然后显示带有更改的完整句子。使用以下代码,我可以进行更改,但我不知道如何将句子的其余部分放在一起。
我有两个数组,一个是女性名字出现的位置,另一个是男性名字。当女人在间隔之间的男人之前时,代码将代词 "his" 替换为 "her"。我需要做的最后一件事是用所做的更改重建句子,但我不知道如何提取句子的其余部分(结果,在示例中,是从位置 0 到 20(Maria her dress but)和 36到 51(Lorena 她的狗),但我需要从 20 到 36(Peter his jeans)和 51 到最后(Juan his car)提取以将它们合并到它们的位置。
结果应该是:"Maria her dress but Peter his jeans Lorena her dog Juan his car"。我将不胜感激,我一直在寻找其他类似的问题,但一无所获。
<?php
$womenpos = array("0","36"); //these arrays are just examples of positions
$menpos = array("20","51"); //they will change depending on the sentence
$sentence = "Maria his dress but Peter his jeans Lorena his dog Juan his car";
echo $sentence."\n";
foreach ($womenpos as $index => $value) {
$value2 = $menpos[$index];
if($value < $value2) {
echo "\nWoman(" . $value . ") is before man(" . $value2 . ")\n";
$end = ($value2 - $value);
$improved = str_replace(' his ', ' her ',
substr($sentence, $value, $end));
echo $improved."\n";
} else {
$improved = "Nothing changed";
echo $improved;
}
}
这对问题的处理方式不同,但我想知道它是否会提供您正在寻找的解决方案:
$sentence = "Maria his dress but Peter his jeans Lorena his dog Juan his car";
$women = array ("Maria", "Lorena");
$words = explode (" ", $sentence);
for ($i=0; $i< sizeof($words); $i++) {
if ($words[$i] == "his" && in_array($words[$i-1], $women)) {
$words[$i] = "her";
}
}
print (join(" ", $words));
这会逐字逐句;如果前面的单词在 $women 数组中,而当前单词是 "his",它会将单词更改为 "her"。然后它按顺序吐出所有的单词。
这是否满足您的需求,还是您真的想要一个复杂的字符串定位答案?
好的,这个怎么样:
$womenpos = array("0","36");
$menpos = array("20","51");
$bothpos = array_merge($womenpos,$menpos);
sort ($bothpos);
print_r($bothpos);
$sentence = "Maria his dress but Peter his jeans Lorena his dog Juan his car";
echo $sentence."\n";
for ($i = 0; $i<sizeof($bothpos); $i++) {
$start = $bothpos[$i];
if ($i ==sizeof($bothpos)-1) {
$end = strlen($sentence);
}
else {
$end = $bothpos[$i+1];
}
$length = $end-$start;
$segment = substr($sentence, $start, $length);
if (in_array($start, $womenpos)) {
$new_segment = str_replace (' his ', ' her ', $segment);
}
else { $new_segment = $segment; }
$improved .= $new_segment;
print "<li>$start-$end: $segment : $new_segment </li>\n";
}
print "<p>Improved: $improved</p>";
这结合了男性和女性的位置数组,将每一段文本都视为可能有错误的文本。如果那段文本从 womenpos 点之一开始,那么它将 'his' 更改为 'her'。如果不是,它就不管它了。
这是否让您朝着想要的方向前进?希望如此!