我需要一个特定单词出现两次的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>
结果是,对于大多数产品来说都可以,但是在这两种情况下第一个单词相同的情况下,产品名称看起来不太好。
答案 0 :(得分:1)
我建议使用正则表达式解决此问题。我从您的问题中得到的是,您想从字符串开头删除重复的单词。这样的模式会有所帮助:
^(\w+)\s(\1)(?=\s)
代码示例:
$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>