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


Search elements of an array within elements of a different array to extract exact or similar keys and their values in 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."('$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的值分别是DatabaseLawTechCreative

我的问题是,我想在一个名为$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%。

这是一个演示玩