我需要一个递归函数来根据已经在同一组中的用户组对帐户进行分组。
但:
If =>['a', 'b'] and grp2 =>[" b "、"c"]这里b与grp1和grp2建立链接如果我有另一个grp248 =>['a', 'z'],因为a存在于grp1中,所以即使group2与group248没有任何共同之处,grp1、grp2和grp248之间也存在链接。
制作链条,比如这个人认识这个人,这个人认识这个人等等。
//input
$data = [
'account1_id' => ['user1_id', 'user2_id'],
'account2_id' => ['user2_id', 'user8_id'],
'account4_id' => ['user15_id', 'user16_id'],
'account5_id' => ['user15_id', 'user16_id'],
'account7_id' => ['user24_id', 'user25_id', 'user26_id', 'user27_id'],
'account8_id' => ['user29_id', 'user30_id', 'user8_id'],
];
//ouput need
$data = [
0 => ['account1_id', 'account2_id', 'account8_id'],
1 => ['account4_id', 'account5_id'],
2 => ['account7_id'],
];
查找:
$usersArray = array();
#first reverse array with user as key
foreach ($data as $idAcc => $users) {
foreach ($users as $idUser) {
if (!key_exists($idUser, $usersArray)) {
$usersArray[$idUser] = array($idAcc);
} elseif (!in_array($idAcc, $usersArray[$idUser])) {
$usersArray[$idUser][] = $idAcc;
}
}
}
# make reduction
$newData = array();
foreach ($usersArray as $idUSer => $accountsId) {
foreach ($accountsId as $accountId) {
$addAsNew=true;
foreach ($newData as $index => $accountsTab) {
if (in_array($accountId, $accountsTab)) {
$addAsNew=false;
$newData[$index]=array_unique(array_merge($newData[$index],$accountsId));
break ;
}
}
if($addAsNew){
$newData[]=$accountsId;
}
}
}
var_dump($newData);