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
可以匹配 How
或 HOW
或 ...)。
在演示中,我模拟了一个结果集,您可以使用 $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
我正在创建用户可以像 "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
可以匹配 How
或 HOW
或 ...)。
在演示中,我模拟了一个结果集,您可以使用 $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