我有一个关键字列表,我可以通过以下代码将它们分开,并将它们插入数据库中的单独行:
$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_value
的值分别是Database
、Law
、Tech
和Creative
。
我的问题是,我想在一个名为$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']
中的Database
与$list
中的"Data"
、"Data Structure"
和"Database"
同时满足上述示例中的三个键。
$post['keywords']
中的Law
不满足$list
中的key
$post['keywords']
中的 Tech
与$list
中的Technology
相遇。
最后$post['keywords']
中的Creative
与$list
中的Creativity
相遇。
$all_key_values="9,10,11,12,16"
,以及新的字符串变量,如:
$all_keys="Data,Data Structure,Database,Creativity,Technology"
您的需求很棘手。我想我应该试一试。这可能不能完全解决你的问题,但也许它会让你走上正确的轨道。
我的第一个想法是使用similar_text(),它将计算字符串中匹配字符的数量并返回数字或百分比。这本身,虽然,并没有真正工作-匹配"数据"answers"数据库"只返回50%的相似度。因此,我使用stripos添加了一个额外的检查。
这是我在玩的东西。不完美,但也许会有帮助:
$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
正如你所看到的,它不匹配"data structure"answers"database",因为这4个匹配的字符并不是这两个单词的80%。
这是一个演示玩