按另一个数组中的值过滤数组?

时间:2014-09-12 14:38:46

标签: php arrays array-filter

我从两个数组开始。第一个是长的并且由潜在的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);
}

当然,上述方法无效。有任何想法吗?我错了吗?感谢。

1 个答案:

答案 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);
    });
}