按条件生成随机值

我有一个数组:

$themes = ['class-A', 'class-B','class-C','class-D','class-E','class-F']

我有以下条件:我需要从中生成 12 个类:

  1. A 类将只发生一次或不发生。

  2. B 类将出现 3 或 6 次。

  3. C 类或 D 类没有限制,可以出现多次。

  4. E 类将恰好发生两次或不发生。

  5. F 类将只发生一次或不发生。

我怎样才能做到这一点?谢谢!


慕标琳琳
浏览 52回答 2
2回答

德玛西亚99

另一种可能的实现<?php$classAPossibleOccuences = [0,1];$classARandomChosenOccurence = $classAPossibleOccuences[array_rand($classAPossibleOccuences)];$classBPossibleOccuences = [3,6];$classBRandomChosenOccurence = $classBPossibleOccuences[array_rand($classBPossibleOccuences)];$classEPossibleOccuences = [0,2];$classERandomChosenOccurence = $classEPossibleOccuences[array_rand($classEPossibleOccuences)];$classFPossibleOccuences = [0,1];$classFRandomChosenOccurence = $classFPossibleOccuences[array_rand($classFPossibleOccuences)];$generatedRandomClassesArr = [];if($classARandomChosenOccurence) {&nbsp; $generatedRandomClassesArr[] = 'class-A';}if($classFRandomChosenOccurence) {&nbsp; $generatedRandomClassesArr[] = 'class-F';}for($i = 0; $i < $classBRandomChosenOccurence; $i++) {&nbsp; $generatedRandomClassesArr[] = 'class-B';}if($classERandomChosenOccurence) {&nbsp; for($i = 0; $i < $classERandomChosenOccurence; $i++) {&nbsp; &nbsp; $generatedRandomClassesArr[] = 'class-E';&nbsp; }}while(sizeof($generatedRandomClassesArr) < 12) {&nbsp; $randomCOrD = ['C','D'];&nbsp; $randomClass = $randomCOrD[array_rand($randomCOrD)];&nbsp; $generatedRandomClassesArr[] = 'class-' . $randomClass;}//randomize array elementsshuffle($generatedRandomClassesArr);highlight_string("<?php\n\$generatedRandomClassesArr =\n" . var_export($generatedRandomClassesArr, true) . ";\n?>");echo '<br><br>';highlight_string("<?php\n\$countValues =\n" . var_export(array_count_values($generatedRandomClassesArr), true) . ";\n?>");?>检查工作演示

神不在的星期二

我在这里实现了一个工作演示,它必须满足你的所有规则<?php$randomClassesArr = [];while (sizeof($randomClassesArr) <= 12) {&nbsp; $letter = chr(rand(65,70));&nbsp; $classLetter = 'class-' . $letter;&nbsp; if($letter === 'A' || $letter === 'F') {&nbsp; &nbsp; if(!in_array($classLetter, $randomClassesArr)) {&nbsp; &nbsp; &nbsp; $randomClassesArr[] = $classLetter;&nbsp; &nbsp; }&nbsp;&nbsp; } elseif($letter === 'B') {&nbsp; &nbsp; $occurences = array_count_values($randomClassesArr);&nbsp; &nbsp; $classBOccurence = $occurences[$classLetter] ?? 0;&nbsp; &nbsp; if($classBOccurence !== 3) {&nbsp; &nbsp; &nbsp; $randomClassesArr[] = $classLetter;&nbsp; &nbsp; }&nbsp; } elseif($letter === 'E') {&nbsp; &nbsp; $occurences = array_count_values($randomClassesArr);&nbsp; &nbsp; $classEOccurence = $occurences[$classLetter] ?? 0;&nbsp; &nbsp; if($classEOccurence !== 2) {&nbsp; &nbsp; &nbsp; $randomClassesArr[] = $classLetter;&nbsp; &nbsp; }&nbsp; } else {&nbsp; &nbsp; $randomClassesArr[] = $classLetter;&nbsp; }}highlight_string("<?php\n\$randomClassesArr =\n" . var_export($randomClassesArr, true) . ";\n?>");echo '<br><br>';highlight_string("<?php\n\$countValues =\n" . var_export(array_count_values($randomClassesArr), true) . ";\n?>");?>在此处查看工作演示,并随时在其之上进行编辑。
打开App,查看更多内容
随时随地看视频慕课网APP