1 回答
TA贡献1785条经验 获得超4个赞
我整理了一些 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
- 1 回答
- 0 关注
- 92 浏览
添加回答
举报