比较两个字符串并使用php查找两个字符串之间的差异
我有一个代码来显示两个句子之间的差异。但我需要检查,不区分大小写比较两个字符串并使用php查找两个字符串之间的差异,php,difference,Php,Difference,我有一个代码来显示两个句子之间的差异。但我需要检查,不区分大小写 <?php function get_decorated_diff($old, $new){ $from_start = strspn($old ^ $new, "\0"); $from_end = strspn(strrev($old) ^ strrev($new), "\0"); $old_end = strlen($old) - $from_end; $new_end
<?php
function get_decorated_diff($old, $new){
$from_start = strspn($old ^ $new, "\0");
$from_end = strspn(strrev($old) ^ strrev($new), "\0");
$old_end = strlen($old) - $from_end;
$new_end = strlen($new) - $from_end;
$start = substr($new, 0, $from_start);
$end = substr($new, $new_end);
$new_diff = substr($new, $from_start, $new_end - $from_start);
$old_diff = substr($old, $from_start, $old_end - $from_start);
$new = "$start<ins style='background-color:#ccffcc'>$new_diff</ins>$end";
$old = "$start<del style='background-color:#ffcccc'>$old_diff</del>$end";
return array("old"=>$old, "new"=>$new);
}
$string_old = "Hello World!";
$string_new = "hello world!";
$diff = get_decorated_diff($string_old, $string_new);
echo "<table>
<tr>
<td>".$diff['old']."</td>
<td>".$diff['new']."</td>
</tr>
</table>";
?>
它显示了
Hello
和Hello
的差异。但是我需要在不区分大小写的情况下显示差异例如,尝试在一个大小写中生成所有字符串
function get_decorated_diff($old, $new){
$originalOld = $old;
$originalNew = $new;
$old = strtolower($old); //Add this line
$new = strtolower($new); //Add this line
$from_start = strspn($old ^ $new, "\0");
$from_end = strspn(strrev($old) ^ strrev($new), "\0");
$old_end = strlen($old) - $from_end;
$new_end = strlen($new) - $from_end;
$start = substr($new, 0, $from_start);
$end = substr($new, $new_end);
$new_diff = substr($originalNew, $from_start, $new_end - $from_start);
$old_diff = substr($originalOld, $from_start, $old_end - $from_start);
$new = "$start<ins style='background-color:#ccffcc'>$new_diff</ins>$end";
$old = "$start<del style='background-color:#ffcccc'>$old_diff</del>$end";
return array("old"=>$old, "new"=>$new);
}
函数获取装饰差异($old,$new){
$originalOld=$old;
$originalNew=$new;
$old=strtolower($old);//添加此行
$new=strtolower($new);//添加此行
$from_start=strspn($old^$new,“\0”);
$from_end=strspn(strrev($旧)^strrev($新),“\0”);
$old\u end=strlen($old)-$from\u end;
$new\u end=strlen($new)-$from\u end;
$start=substr($new,0,$from_start);
$end=substr($new,$new\u end);
$new\u diff=substr($originalNew、$from\u start、$new\u end-$from\u start);
$old_diff=substr($originalOld、$from_start、$old_end-$from_start);
$new=“$start$new_diff$end”;
$old=“$start$old\u diff$end”;
返回数组(“旧”=>$old,“新”=>$new);
}
将其改为小写并进行比较
$old_lower = strlower($old);
$new_lower = strlower($new);
$from_start = strspn($old_lower ^ $new_lower, "\0");
要不区分大小写地比较字符串,请使用strcasecmp
:
<?php
$string_old = "Hello World!";
$string_new = "hello world!";
if (strcasecmp($string_old, $string_new) == 0) {
echo '$string_old is equal to $string_new in a case-insensitive string comparison';
}
else {
echo = 'there is difference between $string_old with $string_new';
}
?>
您可以在函数开头设置为小写
function get_decorated_diff($old, $new){
$old = strlower($old);
$new = strlower($new);
$from_start = strspn($old ^ $new, "\0");
.......
如果需要保留原始值,您可以制作副本,以便稍后返回原始内容,因为('a'^'a')=''即空格字符,您可以使用此代码进行比较,无论大小写:
$from_start = strspn($old ^ $new, "\0 ");
$from_end = strspn(strrev($old) ^ strrev($new), "\0 ");
但是,当要比较的字符不是字母时,它也会有错误匹配 但是我需要一个比较结果,而不改变我给定的旧句子和新句子i changed函数,立即尝试这没有帮助,因为在现有代码中,
strspn
用于比较字符串,而不是strcmp
(或类似).altered建议了另一个简单的解决方案,但我需要一个比较结果,而不更改给定的新旧句子,然后您可以制作一个副本以保留原始的$new和$old..使用小写并返回复制的值。。最简单的方法是什么?是的,看看其他的答案。