PHP & MYSQL-如何搜索单词并像句子一样翻译?

PHP & MYSQL-How to search words and put them like a sentence for translation?

我正在创建用户可以像 "How are you" 一样进行搜索的地方,并将翻译输出到 "Como son tu"

My database looks like this

English         Translation
How             Como
Are             Son
You             Tu

我的代码:

if(($_POST['translateKey'])){
  $translateWord = mysql_fix_string($connection, $_POST['translateWord']);
  if (!empty($translateWord)) {
    $query = "SELECT * FROM $username";
    $result = $connection->query($query);

    if (!$result) {
        if (!$result) die("Couldn't query data: " . $connection->error);
    }
    $rows = $result->num_rows;
    $isTranslation = false;
    for ($i = 0; $i < $rows; ++$i) {
        $result->data_seek($i);

        $row = $result->fetch_array(MYSQLI_ASSOC);
        //using strpos to find the first occurrence of a substring in a string
        $pos = strpos($row['English'],$translateWord);

        if ($pos !== false) {
            echo $row['Translation'] . "</br>";
            $isTranslation = true;
            break;
         } 
    }
    if (!$isTranslation)
                    echo "No translation can be found!</br>";
            }
    }

这是我的代码,但它只能搜索像 "How" -> "Como" 这样的单个字符,如果我尝试搜索多个字符串,它会给我 "No translation can be found!"

有没有一种方法可以搜索多个字符串并将字符输出为一个句子? 喜欢搜索 "How are you" 并获得 "Come son tu"

我正在创建一个蹩脚的翻译器用于学习目的哈哈。

我将一些 PHP 放在一起,它们将尝试处理整个输入字符串(例如 How are you)。它将输入字符串转换为单词数组,然后用于为 IN 表达式(How are you => 'how','are','you')生成适当的字符串,然后将其添加到查询中。我稍微修改了查询以将所有内容小写(以便 how 可以匹配 HowHOW 或 ...)。

在演示中,我模拟了一个结果集,您可以使用 $result->fetch_all() 获得该结果集。代码循环遍历单词列表,尝试匹配结果数组中的每个单词,如果找到,则尝试匹配大小写(它处理大写、大写和小写)。在结果集中找不到的单词将不翻译地通过。

$translateWord = 'How are you';
$words = explode(' ', $translateWord);
$list = implode(',', array_map(function ($word) { return "'" . strtolower(trim($word)) . "'"; }, $words));
$query = "SELECT LOWER(English) AS English, LOWER(Translation) AS Translation
          FROM $username
          WHERE LOWER(English) IN ($list)";
// query table
// $result = $connection->query($query);
// $rows = $result->fetch_all();
// simulated result
$rows = array(array('English' => 'how', 'Translation' => 'como'),
              array('English' => 'are', 'Translation' => 'son'),
              array('English' => 'you', 'Translation' => 'tu'));
$translation = array();
foreach ($words as $word) {
    if (($key = array_search(strtolower($word), array_column($rows, 'English'))) !== false) {
        // match case of result
        if (strtoupper($word) == $word) {
            $translation[] = strtoupper($rows[$key]['Translation']);
        }
        elseif (ucfirst($word) == $word) {
            $translation[] = ucfirst($rows[$key]['Translation']);
        }
        else {
            $translation[] = $rows[$key]['Translation'];
        }
    }
    else {
        // no match, leave alone
        $translation[] = $word;
    }
}
echo $translateWord . " => " . implode(' ', $translation);

输出:

How are you => Como son tu

Demo on 3v4l.org