我想在 PHP 中突出顯示 2 個字串單詞之間的順序不同,假設我有 2 個字串,如下所示。
$string1 = "TO THE ORDER OF United Bank Limited Arab -09254 DT:17-06-20212 ADS";
$string2 = "Arab TO THE ORDER OF United Bank Limited Arab TO -092541 KDS DT:17-06-20212";
突出顯示的單詞應該是Arab To -092541和KDS。到目前為止,我已經嘗試了下面的代碼。
<?php
function compare_strings($array1, $array2) {
$array1 = explode(" ", $array1);
$array2 = explode(" ", $array2);
$arSize1=count($array1);
$arSize2=count($array2);
$index=0;
if($arSize1<$arSize2){
for($i=0;$i<$arSize1;$i ){
if($array1[$i]==$array2[($i $index)]){
echo ' '.$array1[$i];
}
else{
echo ' <b>'.$array2[($i $index)].'</b>';
$index ;
$i--;
}
}
}
}
$string1 = "TO THE ORDER OF United Bank Limited Arab -09254 DT:17-06-20212 ADS";
$string2 = "Arab TO THE ORDER OF United Bank Limited Arab TO -092541 KDS DT:17-06-20212";
echo $string1.'<br/>';
compare_strings($string1,$string2);
?>
如果我只添加單詞 likeArab To并且KDS不更改現有 word ,則此代碼作業正常-092541。當我改變它時-09254,-092541它開始無限回圈并顯示Undefined array key錯誤。
預期突出顯示的詞是 Arab TO -092541 KDS
我嘗試了以下答案/庫,但這些都不適合我的情況。
@Arif 對類似問題的回答
Side-by-side
class.Diff.php
任何幫助/指導將不勝感激。
uj5u.com熱心網友回復:
你的代碼過于復雜......這就是你去無限回圈的原因......
這是一個關于 foreach 回圈的建議,你不需要關心你的陣列在這個例子中有多長,因為你正在檢查來自你正在回圈的陣列的單詞是否出現在另一個中......所以你是已經檢查了陣列中的所有單詞。
這意味著,如果您使用類似 in_array() 之類的東西,您將知道該詞是否出現在另一個陣列中。
所以這是對您的代碼的一個小改動:
<?php
function show_unique_strings($array1, $array2) {
$array1 = explode(" ", $array1);
$array2 = explode(" ", $array2);
foreach ($array2 as $a2Val){
$nKey = in_array($a2Val,$array1);
if($nKey > 0){
echo "<b> $a2Val </b>";
} else {
echo " $a2Val";
}
}
}
$string1 = "TO THE ORDER OF United Bank Limited Arab -09254 DT:17-06-20212 ADS";
$string2 = "Arab TO THE ORDER OF United Bank Limited Arab TO -092541 KDS DT:17-06-20212";
echo $string1.'<br/>';
show_unique_strings($string1,$string2);
?>
將輸出:
遵照 United Bank Limited Arab -09254 DT:17-06-20212 ADS 的命令
阿拉伯人 TO THE ORDER OF United Bank Limited 阿拉伯人 TO -092541 KDS DT:17-06-20212
這樣我們就不關心是否只在第二個陣列上運行,因為對于每個單詞,我們都會進行檢查并回顯一個或另一個......根本不需要計數和跟隨我們的鍵......:)
uj5u.com熱心網友回復:
simplediff庫完成了我的作業,我只需要修改代碼以滿足我的要求。
<?php
function diff($old, $new){
$matrix = array();
$maxlen = 0;
foreach($old as $oindex => $ovalue){
$nkeys = array_keys($new, $ovalue);
foreach($nkeys as $nindex){
$matrix[$oindex][$nindex] = isset($matrix[$oindex - 1][$nindex - 1]) ?
$matrix[$oindex - 1][$nindex - 1] 1 : 1;
if($matrix[$oindex][$nindex] > $maxlen){
$maxlen = $matrix[$oindex][$nindex];
$omax = $oindex 1 - $maxlen;
$nmax = $nindex 1 - $maxlen;
}
}
}
if($maxlen == 0) return array(array('d'=>$old, 'i'=>$new));
return array_merge(
diff(array_slice($old, 0, $omax), array_slice($new, 0, $nmax)),
array_slice($new, $nmax, $maxlen),
diff(array_slice($old, $omax $maxlen), array_slice($new, $nmax $maxlen)));
}
$string1 = "TO THE ORDER OF United Bank Limited Arab -09254 DT:17-06-20212 ADS";
$string2 = "Arab TO THE ORDER OF United Bank Limited Arab TO -092541 KDS DT:17-06-20212";
$arr=diff(explode(" ",$string1),explode(" ",$string2));
echo $string1.'<br/>';
$ret = '';
foreach($arr as $k){
if(is_array($k)){
$ret .= (!empty($k['i'])?"<b>".implode(' ',$k['i'])."</b> ":'');
}
else {
$ret .= $k . ' ';
}
}
echo $ret;
?>
輸出:
聯合銀行有限公司阿拉伯-09254 DT的排列:17-06-20212 ADS
阿拉伯聯合銀行有限公司阿拉伯到ORDER TO -092541 KDS DT:17-06-20212
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329491.html
上一篇:陣列合并回傳鍵
