Van wat ik heb verzameld, kijk je naar een manier om verschillen in tekst te markeren om de verschillen tussen de beschrijvingen te zien. Mag ik u vanaf daar voorstellen dat u de diff-functie beperkt tot slechts b_discription
omdat de andere kenmerken niet lijken te vallen binnen het bereik van wat u nodig hebt. Verwacht je business_logo
, business_name
of mod_date
veranderd worden? Hoe dan ook, de volgende functie kan over alle attributen in uw object worden uitgevoerd als ze kunnen worden geconverteerd naar een tekenreeks.
simplediff is een uitstekend script dat het verschil tussen twee strings vindt, waaronder:
- Bestaat in A en niet in B (Verwijderen)
- Bestaat in B en niet in A (invoeging)
<?php
/*
Paul's Simple Diff Algorithm v 0.1
(C) Paul Butler 2007 <http://www.paulbutler.org/>
May be used and distributed under the zlib/libpng license.
*/
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)));
}
function htmlDiff($old, $new){
$ret = '';
$diff = diff(preg_split("/[\s]+/", $old), preg_split("/[\s]+/", $new));
foreach($diff as $k){
if(is_array($k))
$ret .= (!empty($k['d'])?"<del>".implode(' ',$k['d'])."</del> ":'').
(!empty($k['i'])?"<ins>".implode(' ',$k['i'])."</ins> ":'');
else $ret .= $k . ' ';
}
return $ret;
}
$old = "We smsfactory are world's leading SMS messaging provider offering remarakable and reliable SMS Text and Voice messaging globally through almost all-networks of mobile phones successfully. You may contact-us anytime for making any query. Our Services are very useful economically as well as eco-friendly";
$new = "We smsfactory are world's leading SMS messaging provider offering remarakable and reliable SMS Text and Voice messaging globally through almost all-networks of mobile phones successfully. You may contact-us anytime for making any query. Our Services are very useful economically as well as eco-friendly, which enables you to send simultaneous bulk sms to your targeted Customers, Regular-Customers, Buyers, Shoppers, Fans, Regular-shoppers, Clients, Clientele, Members, Managers, Supervisors, Fieldworkers, Graduates, Post graduates, Technicians, Public, Citizens, Mobile-Users, Viewers, Future-purchasers, Users, End-users, Students, Job-seekers, Enjoyers, Visitors, Frequent-visitors, Persons, Individuals, Frequenter, Obtainers, Receivers, Assignees, Recipients, Travelers, Tourists, Guys, Persons, Men and Women, Spectators, Technicians, Staff, Workers, Recruiters, Newcomers, Representatives, Dealers, Distributors, Followers, Shareholders, Investors, Bondholders, Shareowners, Financiers, Bankers, Participants, Associates, Assistants, Colleagues, Contributors, Helpers, Partakers, Party, Sharers, Supporters, Admirers, Devotees, Groupies, Enthusiasts and many more.";
?>
<!doctype html>
<head>
<style>
.container {
width: 50%;
margin-right: auto;
margin-left: auto;
font-family: sans-serif;
font-size: 12px;
line-height: 16px;
}
del {
background-color: #FFAB91;
color: ;
text-decoration: none;
}
ins {
background-color: #C5E1A5;
color: ;
text-decoration: none;
}
</style>
</head>
<body>
<div class="container">
<?php echo htmlDiff($old, $new); ?>
</div>
</body>
</head>
Werkvoorbeeld:https://3v4l.org/uU0dv