可能感兴趣的人算法

可能感兴趣的人算法

作者:LAMP小白  点击:2032  发布日期:2012-09-20 00:38:00  返回列表

今天把这个功能重头到尾写了个一次 正好往这里贴一贴 以后还会用到
public function maybe($user_id=null){
if(empty($user_id)){
$user_id = user_helper::get_user_id();
}
//查出这个用户的一些信息
$my_user = _uri('user', $user_id);
$my_profile = _uri('user_profile', array('user_id' => $user_id));
//查出这个用户的好友
$his_friend_id = _model('follow')->getFields('res_id', array('user_id'=>$user_id), 'ORDER BY id DESC');
if(!is_array($his_friend_id)){
$his_friend_id = array();
//(实验LAMP小白)如果用户达到百万级 那么这个变量既能保证查到足够的数量 也能保证性能
$limiter = 0;
} else {
$limiter = count($his_friend_id);
}
$result = array();
$region_result = array();
//首先查询擅长种类一致的用户
$limiter += 9;
$result = _model('user_profile')->getFields('user_id', array('good_at' => $my_profile['good_at']), "ORDER BY user_id DESC LIMIT $limiter");
$result = $this->arr_diff($result, $his_friend_id);
P($result);
//检查查询出来的数量 如果满足9个就停止 不然继续
if(count($result) < 9){
$limiter += 8;
//不足8个就继续匹配一个城市的
$ids = _model('user_profile')->getFields('user_id', array('province' => $my_profile['province']), "ORDER BY user_id DESC LIMIT $limiter");
//合并结果
if(is_array($region_result)){
$result = $this->arr_diff(array_unique(array_merge($result, $ids)), $his_friend_id);
}
}
//如果还不满足就取出9个最新注册的用户
if(count($result) < 9){
$limiter -= 9;
$rand_ids = _model('user')->getFields('id', array('id >' => 0), "ORDER BY id DESC LIMIT $limiter");
//合并结果
if(!is_array($result)){
$result = array();
}
$result = $this->arr_diff(array_unique(array_merge($rand_ids, $result), $his_friend_id));
}
//注销掉结果中自己的id
if(in_array($user_id, $result)){
foreach($result as $k => $v){
if($v == $user_id){
unset($result[$k]);
break;
}
}
}
//如果结果大于8则注销掉8之后的
while(count($result) > 8){
array_pop($result);
}
//查询出这8个id的信息
$result = _model('user')->getList($result);

return $result;
}



上一篇:另一种控制器访问的方法 下一篇:快递查询API
0