【发布时间】:2016-11-04 15:44:58
【问题描述】:
我的任务很简单——我得到一个名字列表:
约翰
玫瑰
戴夫
玉
我需要按照以下规则为每个名称分配另外两个名称:
- 每个名字不能重复超过两次
- 子名 != 根名
- 根名称不能有相同的子名称。
意思是:
------ this is valid: --------------------------------------- this is not: -------
John - Rose, Dave ------------------------------- John - Dave, Dave
Rose - John, Jade -------------------------------- Rose - Rose, Jade
Dave - Jade, Rose ------------------------------- Dave - Jade, John
Jade - John, Dave -------------------------------- Jade - John, Dave
(dave's showing more than twice,
and John got him twice
and Rose got herself)
我已经尝试解决这个问题好几个小时了 - 为 subnames1 和 subnames2 分配名称很容易,但是当尝试将它们分配给根名称时,一切都变得一团糟。
这是我最近的失败:
$arr1 = $arr2 = $names = $arr;
shuffle($arr1);
shuffle($arr2);
foreach ($arr1 as $key => $value) {
$arr1[$key]['name2'] = $arr2[$key]['name'];
$count = 0;
foreach ($arr1 as $name) {
if (in_array($arr2[$key]['name'], $name)) {
$count++;
}
}
while ($arr1[$key]['name2'] == $arr1[$key]['name'] || $count > 2) {
shuffle($arr2);
$arr1[$key]['name2'] = $arr2[$key]['name'];
foreach ($arr1 as $name) {
if (in_array($arr2[$key]['name'], $name)) {
$count++;
}
}
}
}
foreach ($names as $key => $name) {
$randName = $names[array_rand($names)]['name'];
while (in_array($randName, $arr1[$key]) || array_key_exists($randName, $arr1)) {
$randName = $names[array_rand($names)]['name'];
}
$arr1[$randName] = $arr1[$key];
unset($arr1[$key]);
}
知道如何解决这个问题吗?
【问题讨论】:
-
看看stackoverflow.com/a/10835795/4511585 和广告一些条件;)
-
Please tag your post titles | Don't -
@PandaCool 无法从该代码中提取没有重复名称的随机结果...您知道这样做的条件是否足够好?