PHP实现二度人脉算法

本文探讨了如何从关注列表中构建人际关系网络,通过PHP代码实现寻找用户关注者、被关注者及其二度、三度人脉关系的算法,并提供改进思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

<?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'));//二度人脉中去除用户自己

?>

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值