2014-09-12 129 views
0

我从两个数组开始。第一个很长,由潜在的ID组成,但ID可以在$potential阵列中多次显示,这是增加稍后选择该ID的概率的一种方式。按另一个数组中的值过滤数组?

第二个数组是需要与$potential数组中的某个人配对的人的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) 

,这样我可以从$arr2指定合作伙伴105,然后重新组合排列,并在下次迭代能够分配的合作伙伴到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

你之前和之后的数组对我来说没有意义 - 为什么'$ arr1'中的'105'但'1051'在'$ arr2'中? – Dan 2014-09-12 14:43:37

+0

丹,'105'和'1051'都需要分配一个伙伴,一次一个。对于他们每个人来说,'$ potential'数组中的每个条目都是潜在的合作伙伴,除了他们不能与他们自己合作。这就是为什么我不会同时删除所有'105' *和*'1051'条目的原因。 – David 2014-09-12 14:54:19

回答

1

让我看看我是否弄直了!您需要循环用户,并且在每个循环中,除了当前的ID之外,您必须拥有一个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); 
    }); 
} 
+0

这似乎很好地工作。谢谢,Vinhas。 – David 2014-09-12 15:03:03

+0

不客气,朋友:) – Vinhas 2014-09-12 17:53:36

相关问题