2014-09-12 2 views
0

Я начинаю с двух массивов. Первый длинный и состоит из потенциальных идентификаторов, но идентификаторы могут отображаться несколько раз в массиве $potential как способ увеличить вероятность того, что этот идентификатор будет выбран позже.Фильтровать массив по значениям в другом массиве?

Второй массив - это идентификаторы лиц, нуждающихся в паре с кем-то из массива $potential. Тем не менее, лица, нуждающиеся в партнере, будут отображаться в обеих массивах. Поэтому мне нужно временно удалить элементы, содержащие идентификатор пользователя, перед назначением пар, чтобы избежать сопряжения человека с самим собой.

$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

Ваши массивы до и после не имеют смысла для меня - почему '105' в' $ arr1', а '1051' находится в' $ arr2'? – Dan

+0

Дэн, '105' и' 1051 'оба должны быть назначены партнеру по одному за раз. Для каждого из них каждая запись в массиве '$ потенциал' является потенциальным партнером, за исключением того, что они не могут быть связаны с самими собой. Вот почему я не удаляю все записи '105' * и *' 1051' одновременно. – David

ответ

1

Позвольте мне посмотреть, получится ли я прямо! Вам нужно зацикливать пользователей и на каждом цикле, вы должны иметь массив с идентификатором внутри массива «potencial», за исключением текущего идентификатора. Это правильно?

Я собирался спросить вас в комментарии, но не хватает репутации :(

Может быть, этот код поможет, если это то, что я предположив быть :)

$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

Это работает отлично. Спасибо, Виньяс. – David

+0

Добро пожаловать, друг :) – Vinhas

Смежные вопросы