在 php 中排列数组中的单词

Arrange words in array in php

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

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

数据库名称 = LAL BAHADUR SHASTRI 银行数据 = SHASTRI LAL 源代码只会重新排列 bankdata 并存储在新数组中 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);
                }
            }

案例一: 当前输出

            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 #

案例二

输入:

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

输出: $newbankdata = NikithaRani MohanRao

如果在 $dbName

中发现连接单词,则应该连接单词
            <?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; 
            ?>