Перестановка слов в массиве на основе положения первого массива.В моем коде есть два массива, мой первый массив - это базовый массив, из которого я собираюсь сравнить его со вторым массивом и сделать позицию такой же, как и в первом массиве.
Рассмотрим 2 входа, считая 1 вход как базу iЯ применяю levenshtein (метафон (каждая база данных слов), метафон (каждое слово банка)), основываясь на том, что расположение слов банковских данных в новом массиве
databaseName = LAL BAHADUR SHASTRI
bankdata = SHASTRI LAL
исходный код будет только переставлять банковские данные исохраненный в новом массиве токовый вывод 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 #
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 = 'SHARI 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 'SHARI' (length=7)
3 => ###
Этот случай будет рассчитываться на основе levenshtein(metaphone($bankWord),metaphone($dbWord))
Случай 2
Ввод:
$dbName = NikithaRani MohanRao $bankdata = Nikitha Rani Mohan Rao
Output : $newbankdata = NikithaRani MohanRao
Следует объединить слово, если оно найденообъединены в $ dbName
Примечание
Положение слова рассчитывается просто нужно сдвинуть слово в массиве путем сравнения первого массива