sql >> データベース >  >> RDS >> Mysql

2つの異なる多次元配列を比較し、変更点を強調表示します

    私が集めたものから、説明の違いを確認するためにテキストの違いを強調する方法を探しています。そこから、diff関数をb_discriptionだけに制限することをお勧めします。 他の属性は必要な範囲内にないように見えるためです。 business_logoを期待していますか 、business_name またはmod_date 変更する?とにかく、文字列に変換できる場合は、オブジェクト内のすべての属性に対して次の関数を実行できます。

    simplediff は、次のような2つの文字列の違いを見つける優れたスクリプトです。

    • BではなくAに存在する(削除)
    • AではなくBに存在する(挿入)
    <?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>
    

    実例: https://3v4l.org/uU0dv




    1. 開発データベースと本番データベースを同期する方法

    2. 負荷がかかった状態でロールアップテーブルを更新する最良の方法は何ですか?

    3. TSQL-データベース内のすべてのテーブルに列を追加する[カーソルの例]

    4. MySQLdbモジュールはプリペアドステートメントをサポートしていますか?