在 PHP 中加入至少一个普通用户的帐户的递归函数
Posted
技术标签:
【中文标题】在 PHP 中加入至少一个普通用户的帐户的递归函数【英文标题】:recursive function to join accounts with at least one common user in PHP 【发布时间】:2021-12-11 00:13:28 【问题描述】:我需要一个递归函数来根据已经在同一组中的用户组对帐户进行分组。
但是:
如果 grp1 => ['a', 'b'] 和 grp2 => ['b', 'c'] 这里 b 与 grp1 和 grp2 建立链接 如果我有另一个 grp248 => ['a' , 'z'],因为 a 存在于 grp1 中,因此 grp1 grp2 和 grp248 存在链接,即使 group2 与 group248 没有任何共同之处。
让这个人知道这个人知道这个人等等……
//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'],
];
【问题讨论】:
您能告诉我们“加入至少一个普通用户的帐户”是什么意思吗?在您的输出索引 0 中,为什么帐户 1,2 和 8 链接?您是否已经尝试解决此问题?如果是这样,即使你知道它没有做你想做的事,也要发布你拥有的东西。 1、2 和 8 是链接的,因为 account1_id 和 account2_id 都有 user2_id。 Account8_id 链接在这个新组中,其中 user8_id 存在于 account8_id 和 account2_id 中。是的,我当然尝试过解决这个问题。很多天。但我暂时做不到。 我在主帖中添加了更多解释 我看到您发布了一些生成预期输出的代码。你还需要帮助吗?如果没有,请将您的代码移至答案,您可以将其标记为已解决。 好的,完成了。现在 24 小时验证。所有人的 Ty。 【参考方案1】:找到它:
$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);
【讨论】:
以上是关于在 PHP 中加入至少一个普通用户的帐户的递归函数的主要内容,如果未能解决你的问题,请参考以下文章
使用用户定义的函数在 spark 中加入数据集时需要填充其他信息