Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较两个字符串并使用php查找两个字符串之间的差异_Php_Difference - Fatal编程技术网

比较两个字符串并使用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..使用小写并返回复制的值。。最简单的方法是什么?是的,看看其他的答案。