在不同数组的元素中搜索数组的元素,以在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哈哈,我一直在想这个。。。你也可以调查一下。。。通配符字符串匹配函数。可能会有帮助。当然,马克,我会调查的,贝斯特,