【问题标题】:Arrange words in array in php在php中将单词排列在数组中
【发布时间】:2019-01-31 18:03:53
【问题描述】:

根据第一个数组的位置重新排列数组中的单词。在我的代码中有两个数组,我的第一个数组是基本数组,我将从中将它与第二个数组进行比较,并使位置与第一个数组相同。

考虑 2 输入 通过将 1 个输入作为基础,我应用 levenshtein(metaphone(每个单词数据库),metaphone(银行的每个单词)) 然后基于将 bankdata 的单词排列在新数组中

databaseName = LAL BAHADUR SHASTRI 银行数据 = 沙斯特里拉尔 源代码只会重新排列银行数据并存储在新数组中 bankdata的当前输出:LAL SHASTRI

重新排列正常进行,只需要在数组中排列单词

            $db = 'LAL BAHADUR SHASTRI YADAV';
            $bank = 'SHASTRI LAL';
            $a = reArrangeArray($db,$bank);

            function reArrangeArray($db,$bank)
            {
                $dataBaseName = $db;
                $bankdataRows = [$db,$bank,];
                $dbWords = preg_split("#[\s]+#", $dataBaseName);     
                foreach ($bankdataRows as $bankdata)
                {
                $bankWords = preg_split("#[\s]+#", trim($bankdata));
                $result    = [];    
                if(!empty($bankWords))
                    foreach ($dbWords as $dbWord)
                    {
                    $idx   = null;
                    $least = PHP_INT_MAX;
                    foreach ($bankWords as $k => $bankWord)
                        if (($lv = levenshtein(metaphone($bankWord),metaphone($dbWord))) < $least)
                        {
                        $least = $lv;
                        $idx   = $k;
                        }
                    @$result[] = $bankWords[$idx];
                    unset($bankWords[$idx]);
                    }
                $result = array_merge($result, $bankWords);
                var_dump($result);
                }
            }

案例 1: 当前输出

            array (size=4)
            0 => string 'LAL' (length=3)
            1 => string 'BAHADUR' (length=7)
            2 => string 'SHASTRI' (length=7)
            3 => string 'YADAV' (length=5)

            array (size=4)
            0 => string 'LAL' (length=3)
            1 => string 'SHASTRI' (length=7)
            2 => null
            3 => null

预期输出

我需要和databaseArray一样的数组位置

            $dbName = 'LAL BAHADUR SHASTRI YADAV';
            $bankName = 'SHASTRI LAL';

            array of db (size=4)
            0 => string 'LAL' (length=3)
            1 => string 'BAHADUR' (length=7)
            2 => string 'SHASTRI' (length=7)
            3 => string 'YADAV' (length=5)

            array of bankname (size=4)
            0 => string 'LAL' (length=3)
            1 => #
            2 => string 'SHASTRI' (length=7)
            3 => ###

如果在第一个数组中找不到单词,它应该用 # 放置,因为位置是 3,它没有匹配的元素它有 3 #

案例2

输入:

$dbName = NikithaRani MohanRao $bankdata = Nikitha Rani Mohan Rao

输出: $newbankdata = NikithaRani MohanRao

如果在 $dbName 中找到连接的话,它应该连接单词

【问题讨论】:

  • 莱文尼什距离是多少?谷歌搜索finds no matches。您可能是指 Levenshtein 距离吗?

标签: php arrays fuzzy-logic fuzzywuzzy


【解决方案1】:
            <?php  
            $DatabaseName = "LAL BAHADUR SHASTRI YADAV";
            $BankName = "SHASTRI LAL";

            $data = explode(" ", $DatabaseName);
            $bank = explode(" ", $BankName);
            sort($data);
            sort($bank);
            if($data == $bank){
                echo "true";
                exit;
             }

            $lev = 0;
            foreach($data as $key => $name){
                $lev += levenshtein($name, $bank[$key]);
            } 
            echo PHP_EOL . $lev; 
            ?>     

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多