我需要一個遞回函式來根據同一組中已有的用戶組對帳戶進行分組。
但 :
如果 grp1 => ['a', 'b'] 和 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'],
];
uj5u.com熱心網友回復:
找到它 :
$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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/344912.html
上一篇:BST-類似結構元素遞回插入
