自己写的模糊搜索功能,大神看看哪里不好

浏览:1996 发布日期:2015/03/28 分类:求助交流 关键字: 模糊搜索
/**
     * 按标题和关键字搜索商品
     */
    public function searchProk(){
        $keywords=I("get.keyword"); //获取关键词
        $keywords = urldecode($keywords); //对关键词进行转义
        preg_match_all("/./u", $keywords, $key_list); //拆分关键词成为一个个词,支持中文
        foreach ($key_list[0] as $key => $value) {    //创建搜索条件
            $map['title|keywords'][]=array("like","%".$value."%");
        }
        $map['title|keywords'][]  = "or";
        $data=M("product")->where($map)->select();  //查询数据
        foreach ($data as $k => $v) {   //对数据进行循环计算,包含1个关键词,$data[$k]["orders"]加1,包含第二个,再加一
            $data[$k]["orders"]=0;  //初始化$data[$k]["orders"]
            foreach ($key_list[0] as $k1 => $v1) {
                $check_k=strstr($v['keywords'],$v1);
                $check_t=strstr($v['title'],$v1);
                if($check_t || $check_k)
                    $data[$k]["orders"]+=1;
            }
        }
        function array_sort($array, $on, $order=SORT_ASC){  //这个函数是php.net复制来的,是对数组进行排序
            $new_array = array();
            $sortable_array = array();

            if (count($array) > 0) {
                foreach ($array as $k => $v) {
                    if (is_array($v)) {
                        foreach ($v as $k2 => $v2) {
                            if ($k2 == $on) {
                                $sortable_array[$k] = $v2;
                            }
                        }
                    } else {
                        $sortable_array[$k] = $v;
                    }
                }

                switch ($order) {
                    case SORT_ASC:
                        asort($sortable_array);
                    break;
                    case SORT_DESC:
                        arsort($sortable_array);
                    break;
                }

                foreach ($sortable_array as $k => $v) {
                    $new_array[$k] = $array[$k];
                }
            }

            return $new_array;
        }
        $data=array_sort($data, 'orders', SORT_DESC); //对数组根据orders进行排序
        echo "<pre>";
        print_r($data);
    }
最佳答案
评论( 相关
后面还有条评论,点击查看>>