Перестановка слов в массиве на основе положения первого массива.В моем коде есть два массива, мой первый массив - это базовый массив, из которого я собираюсь сравнить его со вторым массивом и сделать позицию такой же, как в первом массиве.
Рассмотрим 2 ввода. Рассматривая 1 вход в качестве базы, я применяю левенштейн (метафон (каждая база данных слов), метафон (каждое слово банка)), затем на основе того, что слова банковских данных размещаются в новом массиве
databaseName = LAL BAHADUR SHASTRI bankdata = SHASTRI Исходный код LAL будет только переупорядочивать банковские данные и сохраняться в новом массиве, текущий вывод банковских данных: 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 #
Case2
Ввод:
$ dbName = NikithaRani MohanRao $ bankdata = Никита Рани Мохан Рао
Вывод: $ newbankdata = NikithaRani MohanRao
Itдолжен конкатенировать слово, если найдено, конкатенировать в $ dbName