// 代码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 回答