如果是重复单词,有没有办法修剪字符串中的单词,如果没有重复单词则不修剪吗?

时间:2019-02-07 14:17:30

标签: php string

我需要一个特定单词出现两次的if语句的组合,然后仅需要删除这些实例中的第一个。

在我的代码$heading_title中,是一个字符串,显示为产品名称。 现在,在两种情况下,标题标题两次使用相同的单词。

heading title = Same Same words used

heading title = Words Words are the same

heading title = correct words used

现在,在相同和单词的情况下,我希望对字符串进行修剪,使其显示如下:

Same words used and Words are the same

最后一个标题没问题。有没有办法做到这一点?

我在Stack上尝试过一些关于trim的答案,但是我无法使其正常工作,因此仅粘贴了初始代码。

<h1 class="heading-title" itemprop="name"><?php echo $heading_title; ?></h1>

结果是,对于大多数产品来说都可以,但是在这两种情况下第一个单词相同的情况下,产品名称看起来不太好。

2 个答案:

答案 0 :(得分:1)

我建议使用正则表达式解决此问题。我从您的问题中得到的是,您想从字符串开头删除重复的单词。这样的模式会有所帮助:

^(\w+)\s(\1)(?=\s)

Regex Demo

代码示例:

$re = '/^(\w+)\s(\1)(?=\s)/m';
$str = 'Words Words are the same
correct words used
Same words used and Words are the same
Same words used and Words are the same Same';
$subst = '$1';

$result = preg_replace($re, $subst, $str);
echo $result;

答案 1 :(得分:-1)

我已经有多年没有使用PHP了,所以我将尝试使用伪代码而不是可运行的PHP进行回答,但是希望这个概念应该足够简单明了,以便您适应它。

基本上,您需要遍历字符串中的每个单词,并检查它是否与它前面的单词相同。如果是这样,请删除第二个单词(重复的单​​词):

// Assume this gives an array containing all the separate words:
$input = String.Split($originalString, " "); 
$result = ""; // A string to append to 

$second = 0; // Second pointer to positions in $input

for($first = 0; $first <= $input.Length; $first++)
{
    if($first = 0) // Allways add the first word..
    {
        $result += $input[first] + " ";
    }
    else
    {
        // From word #2 and onward, $second will point to 
        // the word preceeding the word pointed to by $first:
        $second = $first - 1;

        // Only add each of the remaining words if it 
        // is different from the word before it:
        if($input[first] != $input[second]) 
        {
           $result += $input[first] + " ";
        }
    }
}

此后,$result应该是一个字符串,其中包含来自$originalString的每个单词,这些单词紧跟在同一个单词之后。

您可能需要对此稍作调整,并可能添加一些逻辑以支持其他字符,例如,.等,但是我希望这可以帮助您开始。 / p>