比较两个字符串,减去相同的字符并返回新值。

3
我有两个字符串,可能不止两个, 可能是5个或6个。
 $a =  2012-05-18 usr abc removed device id=858 sn=abc cmmac=000 drumac=123
 $b =  2012-05-18 usr abc removed device id=858 sn=abc cmmac=000 drumac=12352015-03-26 usr mabdel001c removed device id=814 sn=abcd cmmac=1234 drumac=000

我需要帮助,我需要一个函数或者任何一种方法,当我比较 $a 和 $b 时,它只会返回以下字符串。
$remaining = '2015-03-26 usr mabdel001c removed device id=814 sn=abcd cmmac=1234 drumac=000';

我尝试了这个函数,但没有成功 if (strcmp($var1, $var2) === 0) {


请注意在这里寻求帮助的规则:您应该自己完成工作,我们只是在这里帮助您解决无法自行解决的问题。 - arkascha
没有任何一个起始字符串与结果字符串匹配。 - Andreas
@Andreas 这是正确的,但这符合原帖的问题。 - arkascha
为什么这个被踩了? - Muhammad
@arkascha 请慷慨一些。 - Muhammad
显示剩余6条评论
3个回答

5

你可能没有想到,但 str_replace 函数可以解决这个问题。

$remaining = str_replace($a, '', $b);

如果在$b中找到了$a,那么$remaining将是从中删除了$a字符后的$b,否则$remaining将保持与$b相同的值。


4

您可以使用str_replace并使用空字符串进行替换:

$a =  "2012-05-18 usr abc removed device id=858 sn=abc cmmac=000 drumac=123";
$b =  "2012-05-18 usr abc removed device id=858 sn=abc cmmac=000 drumac=12352015-03-26 usr mabdel001c removed device id=814 sn=abcd cmmac=1234 drumac=000";

Echo str_replace($a, "", $b);

https://3v4l.org/KiZLN


我看到我来晚了。这就是在手机上打字的缺点。页面不会更新新答案。我应该删除我的回答吗? - Andreas
1
没事的。类似的答案是无害的,有时人们可以从稍微不同的解释中受益,我个人认为。 - Don't Panic

1
这里的另一种方法是跳过匹配的内容。
$a =  '2012-05-18 usr abc removed device id=858 sn=abc cmmac=000 drumac=123';
$b =  '2012-05-18 usr abc removed device id=858 sn=abc cmmac=000 drumac=12352015-03-26 usr mabdel001c removed device id=814 sn=abcd cmmac=1234 drumac=000';
if(strpos($b, $a) !== false) {
    echo substr($b, (strrpos($b, $a) + strlen($a)));
}

会起作用。但如果有多个匹配项,则需要不同的方法(因为这仅适用于1次迭代)。str_replace 可能是您最好的选择。
演示:https://eval.in/829490

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接