【发布时间】: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