在不同数组的元素中搜索数组的元素,以在PHP中提取精确或相似的键及其值

在不同数组的元素中搜索数组的元素,以在PHP中提取精确或相似的键及其值,php,Php,我有一个关键字列表,我可以通过以下代码将它们分开,并将它们插入数据库中的单独行中: $comma = ""; $values = ""; $array = explode(",", mysqli_real_escape_string($db_connect, $post['keywords'])); foreach ($array as $key_value) { $key_value = str_replace(" ", '', $key_value); $values .

我有一个关键字列表,我可以通过以下代码将它们分开,并将它们插入数据库中的单独行中:

$comma  = "";
$values = "";
$array  = explode(",", mysqli_real_escape_string($db_connect, $post['keywords']));
foreach ($array as $key_value) {
    $key_value = str_replace(" ", '', $key_value);
    $values .= $comma."('$id', '$activation', '$key_value')";
    $comma = ",";
}
$insert = mysqli_query($db_connect, "INSERT INTO database.keywords
            (id, activation, keywords) VALUES $values");
$post['keywords']
的示例如下:

Array ( [keywords] => Database, Law, Tech, Creative )
正如您在上面的示例中所看到的,
$key\u value
值是
数据库
法律
技术
创意

我的问题是,我想在一个名为
$list
的不同数组中搜索上述示例的每个元素,以在
$post['keywords']
中提取具有精确或类似单词的键及其值。例如,假设下面是我们的
$list
数组:

$list = array(
    "Data" => "9",
    "Data Structure" => "10",
    "Database" => "11",
    "Creativity" => "12",
    "Forest" => "13",
    "Al Pacino" => "14",
    "Humans" => "15",
    "Technology" => "16"
);
因此,
$post['keywords']
中的
数据库
遇到了上述示例中的三个键,分别是
$list
中的
“Data”
“Data Structure”
“Database”

Law
$post['keywords']
中遇到
$list
中没有键

Tech
$post['keywords']
中作为其在
$list
中的键与
技术
相结合

最后,
$post['keywords']
中的
Creative
作为其在
$list
中的键与
Creative
相遇

因此,我的最终目标是生成一个新的字符串变量,如
$all_key_values=“9,10,11,12,16”
,以及新的字符串变量,如:

$all_keys="Data,Data Structure,Database,Creativity,Technology"

你的要求很棘手。我想我应该试试看。这也许不能完全解决你的问题,但也许会让你走上正轨

我的第一个想法是使用,它将计算字符串中匹配字符的数量,并返回数字或百分比。然而,这本身并不能真正起作用——匹配“数据”和“数据库”只会返回50%的相似性。因此,我使用添加了一个额外的检查

这就是我玩的东西。这并不完美,但也许会有帮助:

$list = array(
    "Data" => "9",
    "Data Structure" => "10",
    "Database" => "11",
    "Creativity" => "12",
    "Forest" => "13",
    "Al Pacino" => "14",
    "Humans" => "15",
    "Technology" => "16"
    );

$post = array ('Database', 'Law', 'Tech', 'Creative');

$all_key_values = $all_keys = array();

foreach ($post as $keyword) {
    foreach ($list as $word=>$num) {
        $sim_chars = similar_text($keyword, $word);
        if ($sim_chars/strlen($keyword) > .8 || $sim_chars/strlen($word) > .8) {
            $all_key_values[] = $num;
            $all_keys[] = $word;
        }
        elseif (stripos($keyword, $word) !== false || strpos($word, $keyword) !== false) {
            $sll_key_values[] = $num;
            $all_keys[] = $word;
        }
    }        
}

print_r(implode(',', $all_key_values));
print_r(implode(',', $all_keys));
输出:

9,11,16,12
Data,Database,Technology,Creativity
如您所见,它与“数据结构”和“数据库”不匹配,因为匹配的4个字符不是这两个单词的80%


如何将
数据库
数据
数据结构
匹配?你到底想让计算机如何判断“相似的词”?亚伯拉罕,谢谢你抽出时间。。在这种情况下,由于
数据
字符位于
数据库
中,因此它可以是我的关键字之一;然而,我真的不知道如何定义相似性。大约80-90%的相似字母是好的。测试
similor\u text()
根据获得好的字母所需的单词,它只得到45%或>hit@kevinabelita,Kevin,你能提交你的答案吗?@Apiah你可以试试Mark的答案谢谢Mark在这个问题上花时间帮忙,干杯,@Apiah没问题很乐意帮忙:)@Apiah可以玩
类似的\u text()
。这对我来说是一个新概念,可能有更好的方法使用它,特别是第三个百分比参数。我注意到前两个参数的顺序会改变结果。。。总之,快乐编码,cheers@Apiah哈哈,我一直在想这个。。。你也可以调查一下。。。通配符字符串匹配函数。可能会有帮助。当然,马克,我会调查的,贝斯特,