<?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(
isset($return[$p]['att']) && 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'));
//二度人脉中去除用户自己
?>