Я начинаю с двух массивов. Первый длинный и состоит из потенциальных идентификаторов, но идентификаторы могут отображаться несколько раз в массиве $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);
}
Конечно, вышеуказанное не работает. Есть идеи? Неужели я все это делаю неправильно? Благодарю.
Ваши массивы до и после не имеют смысла для меня - почему '105' в' $ arr1', а '1051' находится в' $ arr2'? – Dan
Дэн, '105' и' 1051 'оба должны быть назначены партнеру по одному за раз. Для каждого из них каждая запись в массиве '$ потенциал' является потенциальным партнером, за исключением того, что они не могут быть связаны с самими собой. Вот почему я не удаляю все записи '105' * и *' 1051' одновременно. – David