我从两个数组开始。第一个是长的并且由潜在的ID组成,但是id可以在$potential
数组中多次出现,作为增加稍后选择id的概率的方法。
第二个数组是需要与$potential
数组中某人配对的人员ID。但是,需要合作伙伴的人员将出现在两个阵列中。因此,我需要在分配对之前暂时删除包含用户ID的元素,以避免将某人与自己配对。
$potential = array('105', '105', '105', '2105', '1051');
$users = array('105', '1051');
由此我需要最终:
$arr1 = Array ( [0] => 105 [1] => 105 [2] => 105 )
$arr2 = Array ( [3] => 2105 [4] => 1051 )
这样我就可以从105
为$arr2
分配合作伙伴,然后重新组合数组,并在下一次迭代中将合作伙伴分配给1051
:
$arr1 = Array ( [4] => 1051 )
$arr2 = Array ( [0] => 105 [1] => 105 [2] => 105 [3] => 2105 )
我一直在搞乱,但这是我做过的最好的事情:
function differs ($v) { global $users; return ($v == current($users)) === true; }
foreach ($users as $value) {
$arr1 = array_filter($potential, differs);
$arr2 = array_diff($potential, $arr1);
}
当然,上述方法无效。有任何想法吗?我错了吗?感谢。
答案 0 :(得分:1)
让我看看我是否直截了当!你需要循环用户并在每个循环中,你必须有一个数组,其id在“potencial”数组中,除了当前的id。是吗?
我准备在评论中问你这个,但我没有足够的声誉:(
也许这段代码会有所帮助,如果它是我想要的那样:)
$potential = array('105', '105', '105', '2105', '1051');
$users = array('105', '1051');
foreach ($users as $user) {
$available = array_filter($potential, function($id) use ($user){
return ($id != $user);
});
}