У меня есть 6 многомерных массивов PHP , каждый из которых содержит 20 под-массивов, которые, в свою очередь, содержат по два суб-массива, один из которых является строкой, а другой – неопределенным числом ключевых слов.
Я хочу сравнить каждый из 120 подматриц с 100 другими подматрицами, содержащимися в других многомерных массивах. Таким образом, подматрица 1 в многомерном массиве 1 сравнивается с подматрицей 1 с подматрицей 20 в многомерном массиве 2 с многомерным массивом 6 и т. Д.
Как я могу сравнить каждый из 20 подматриц в одном многомерном массиве с каждыми 20 под-массивами в других 5 многомерных массивах на основе сравнения строк / строк и ключевых слов / ключевых слов ? И впоследствии слияние массивов со сходством выше определенного порога ?
В конечном итоге получается один многомерный массив, содержащий все объединенные подмассивы ?
Количество ключевых слов почти никогда не будет одинаковым, и они почти никогда не будут в одном порядке.
Array // This is the first multidimensional-array. ( [0] => Array ( [string] => This is a story about keywords. [keywords] => "These", "are", "the", "keywords", "that", "the", "arrays", "that", "were", "merged", "had", "in", "common" ) [1] => Array ( [string] => This is a story about a monkey. [keywords] => "Trees", "Monkey", "Flying", "Drink", "Vacation", "Coconut", "Big", "Bonobo", "Climbing" ) ) Array // This is the second multidimensional-array. ( [0] => Array ( [string] => This is another, but different story, about a monkey. [keywords] => "Monkey", "Big", "Trees", "Bonobo", "Fun", "Dance", "Cow", "Coconuts" ) [1] => Array ( [string] => This is a story about mountains. [keywords] => "Mountain", "Elevation", "Sightseeing", "Hill", "so", "forth" ) )
Array ( [0] => Array // Merged 2+ sub-arrays of two different multidimensional-arrays ( [string] => This is a story about a monkey.This is another, but different story, about a monkey. [keywords] => "Monkey", "Trees", "Bonobo", "Coconuts", "Big" ) [0] => Array // Merged 2+ sub-arrays of two different multidimensional-arrays ( [string] => [keywords] => ) )
У меня есть рабочее понимание PHP , SQL , Javascript , JQuery и Python , и я ищу все от письменного решения, подсказок или ссылок на один или любые полезные советы.
Я рассмотрел использование PHP levenshtein, но не знаю, как применить эту функцию к массиву, содержащему несколько ключевых слов в неуказанном порядке и содержащем различное количество ключевых слов.
Кроме того, я не уверен, как сравнивать несколько массивов друг с другом, а не просто с основным массивом. Разумеется, массивы можно разделить, загрузить в базу данных или другое, если это поможет сделать это возможным.
Я знаю, что этот вопрос довольно хаотичен и / или запутан, но, проведя поиски решения через несколько дней, подошел с пустыми руками, я не видел другого выбора, кроме как пойти сюда. Я ни в коем случае не сторонник, и мои знания в области кодирования ограничены, поэтому, если есть определенная функция, выполняющая именно то, что я ищу, тогда, пожалуйста, укажите мне в этом направлении, так как я сам не пересек ее ,
Любая помощь, советы, ссылки или такие, которые способствуют решению этой проблемы, очень приветствуются. Заранее большое спасибо.
Насколько я понимаю вашу ситуацию, у вас есть только один многомерный массив. Первый уровень имеет 6 массивов, каждый массив первого уровня содержит 20 (второй уровень) массивов. Каждый массив второго уровня содержит 1 (третий уровень) массив с 2 элементами: string
и keywords
.
Вы хотите сравнить каждую string
и keywords
со всеми другими string
s и keywords
s, которые существуют в многомерном массиве.
Давайте сделаем несколько задумчивых циклов с array_diff_key () & range ()
foreach($L1arrays as $index=>$L1focus){ // 6 arrays with indexes 0 - 5 // now we want to check against all siblings that haven't been checked yet foreach(array_diff_key($L1arrays,range(0,$index)) as $L1comparison){ // no dupe loops // When $index=0, second foreach will only loop through $L1arrays indexed 1-5 // When $index=1, second foreach will only loop through $L1arrays indexed 2-5 // When $index=2, second foreach will only loop through $L1arrays indexed 3-5 // When $index=3, second foreach will only loop through $L1arrays indexed 4-5 // When $index=4, second foreach will only loop through $L1arrays[5] // When $index=5, it will not loop because it has already been compared // to all other indexes via previous loops. /* ... in this section you can loop through the 20 sub-arrays of $L1focus and compare them against the 20 sub-arrays of each $L1comparison */ } }
Теперь обсудим логику сравнения. Я не понимаю из текущей информации в вашем вопросе, как вы хотите отличить, насколько один массив достаточно похож на другой. Хотелось бы, чтобы вы приложили больше усилий для создания реалистичного Wanted Multidimensional Array
– второй массив имеет дублирующий ключ 0 и имеет в нем два пустых элемента, поэтому он бесполезен.
Вы хотите сравнить keywords
или string
значения или оба? Насколько строгое сравнение (что такое «порог подобия»)?
PHP – отличный исполнитель для такого рода работ. Я удалил тег javascript из вашего вопроса.
Проделайте небольшую работу / исследование (используя мое предложение по циклу) и уточните, как вы хотите сравнить самые глубокие значения массива и отредактировать свой вопрос. Чтобы снова привлечь внимание к этому вопросу, напишите комментарий, начинающийся с @mickmackusa
Удачи!