PHP实现二度人脉算法

微博控的朋友都知道,会有"可能感兴趣的人"一栏,看到的时候总想着这个怎么写的,今天有空就随便写了下,详见代码:

<?php
/**
 * 数据库中得到的关注列表
 * $str字符串中,每个逗号分隔的记录表示前者关注后者
 */
$str =  "A-B,A-C,A-D,A-E,A-F,A-G,B-C,B-A,B-G,B-I,B-P,B-M,C-A,C-B,C-D,C-G,C-J,C-M";
$arr =  explode( ',', $str);
/**
 * 遍历$arr,找出每个人关注的集合与被关注的集合
 * 关注的集合index为att
 * 被关注的集合index为bea
 */
$return =  array();
foreach($arr  as $one){
$relation = explode( '-', $one);
$index_1 = $relation[ '0'];
$index_2 = $relation[ '1'];
$return[$index_1][ 'att'][] = $relation[ '1']; //$index_1 关注了 $relation['1']
$return[$index_2][ 'bea'][] = $relation[ '0']; //$index_2 关注了 $relation['0']
}
/**
 * 找出A的二度人脉
 */
$A_att = $return[ 'A'][ 'att']; //A的关注集合
$A_era =  array(); //初始化A的二度人脉数组
foreach($A_att  as $p){
if( is_array($return[$p][ 'att'])){ //如果$p有关注集合,则将其att集合合并到A的二度人脉数组中
$A_era =  array_merge($A_era, $return[$p][ 'att']);
}
}
//$A_era =  array_unique($A_era); //不去除重复的值,用来计算二度人脉中出现的人在A用户关注的人中有多少人同时关注
$A_era =  array_diff($A_era,  array( 'A')); //二度人脉中去除用户自己

?>

衍生出三度、四度人脉算法就不扩展了,如果有不足的地方还请指点。

如有更好方法的朋友恳请分享下。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值