// 代码1
public function search($q, $search_type, $limit = 20, $topic_ids = null) {
// 分析: q 是我们上传的关键字,$search_type 是 topic, $limit=10
// 其中对 $q 的处理是以空格为分割符,把关键字保存为一个数组,如果关键字长度为1就去除该关键字。。。
$q = (array)explode(' ', str_replace('  ', ' ', trim($q)));
foreach ($q AS $key => $val)
{
	if (cjk_strlen($val) == 1)
	{
		unset($q[$key]);
	}
}
// 接下去调用代码2了
}
// 代码2
// 从代码2看到它把关键字数组给合成一个字符串。。。。然后查询语句就是 LIKE '关键字%' 
	public function search_topics($q, $limit = 20)
	{		
		if (is_array($q))
		{
			$q = implode('', $q);
		}
		
		if ($result = $this->fetch_all('topic', "topic_title LIKE '" . $this->quote($q) . "%'", null, $limit))
		{
			foreach ($result AS $key => $val)
			{
				if (!$val['url_token'])
				{
					$result[$key]['url_token'] = urlencode($val['topic_title']);
				}
			}
		}
		
		return $result;
	}
// 最后,假设我们输入的关键字是:       求  深入浅出 C 语言 (第二版)
// 经过以上流程处理后最终查询的是        LIKE '深入浅出语言(第二版)%' 
// 总结一下我认为不合理的地方:
// 1. 单个字被过滤导致像 C 这样的关键字丢失了。
// 2. 空格其实没做用了——最终会被代码过滤掉
// 3. 关键字必需从开头就符合,不如 LIKE '%关键字%' 
// 当然以上是个理见解,欢迎指教。。
AI智能回复搜索中,请稍后...
3 回答