2014-09-12 114 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

相關問題