被修改
如何比较两个文本字符串以检查string1的结尾是否与string2的开头相同。字符串长度和匹配部分是可变的。因此,我想合并两个字符串。
$string1 = 'Lorem ipsum dolor sit amet, consetetur';
$string2 = 'amet, consetetur sadipscing elitr 123';
$result = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr 123';
我不知道我能用哪种方式处理,所以我不知道如何开始。
答案 0 :(得分:2)
function create_text_panorama(array $strings)
{
$joined = array();
$strings_length = count($strings);
if ($strings_length <= 1) {
return $strings;
}
$joined[] = $strings[0];
for ($i = 1; $i < $strings_length; $i++) {
$current = $strings[$i];
$prev = $strings[$i-1];
$prev_len = strlen($prev);
$p = 0;
for ($j = 0; $j < $prev_len; $j++) {
if (!isset($current[$p]) || $prev[$j] !== $current[$p]) {
$p = 0;
} else {
$p++;
}
}
if ($p > 0) {
$joined[count($joined) - 1] .= substr($current, $p + 1);
} else {
$joined[] = $current;
}
}
return $joined;
}
echo '<pre>';
$strings = array('Lorem ipsum dolor sit amet, consetetur', 'amet, consetetur sadipscing elitr 123');
print_r(create_text_panorama($strings));
结果:
Array
(
[0] => Lorem ipsum dolor sit amet, consetetur sadipscing elitr 123
)
很容易。
答案 1 :(得分:2)
基本上你必须找到与A的后缀相匹配的B的最长前缀。
function merge($a, $b)
{
$suffix_len = strlen($b); // assume $b matches the suffix of $a
// compare suffix of $a with prefix of $b
while ($suffix_len && substr_compare($a, $b, -$suffix_len, $suffix_len) != 0) {
--$suffix_len; // remove one character off the end
}
// test whether we have a match
return $suffix_len ? $a . substr($b, $suffix_len) : $a;
}
echo merge('Lorem ipsum dolor sit amet, consetetur', 'amet, consetetur sadipscing elitr 123');
答案 2 :(得分:0)
这是一种方法:
<?php
$content = array('Lorem ipsum dolor sit amet, consetetur',
'amet, consetetur sadipscing elitr 123');
for ($i=0; $i <count($content)-1 ; $i++) {
$pos=0;
$counter=0;
while ($counter<strlen($content[$i+1])) {
$end=substr($content[$i],strlen($content[$i])-$counter++);
$start=$content[$i+1];
if (strpos($start,$end)===0) {
$pos=$counter-1;
}
}
$content[$i]=$content[$i].substr($content[$i+1], $pos-1);
}
echo $content[0];