Потому что я музыкальный ботаник (но только начинающий кодер), я сделал этот скрипт случайным образом выбрал несколько шагов (из таблицы MySQL) (чтобы помочь с неформальной композицией в последовательном стиле). Он дает 9-12 неповторяющихся названий тангажа в 3-4 набора по 3-4 шага каждый. Например: C, Eb, Gb (break) A, D, F, Db (break) Ab, G, B.
1) Есть ли более эффективный способ достижения этого желаемого результата? Код кажется громоздким. Я просто передал его с помощью команд if-else. 2) Как показывает комментарий в начале кода, вероятность различных распределений неравнозначна. На практике это нормально, но было бы неплохо иметь альтернативу.
Благодарю.
<?php /* This code assigns pitch distributions to one of the following combinations. The first number is possible values of $numtot: 9 = 3,3,3 10 = 4,3,3; 3,4,3; 3,3,4 11 = 4,4,3; 4,3,4; 3,4,4; 12 = 4,4,4; 3,3,3,3; Note that probabilities are unequal: eg: 3,3,3 is 2x as likely to occur as 3,3,3,3 */ $sandbox = mysql_connect("localhost", "root", "password") or die(mysql_error()); mysql_select_db("sandbox", $sandbox); $numtot = rand(9,12); $sql = "SELECT * FROM pitches ORDER BY RAND() LIMIT $numtot"; $result = mysql_query($sql, $sandbox); echo "Your pitches are:<br>"; if ($numtot==9) { while ($row = mysql_fetch_array ($result)) { if ($numtot>7) {echo $row['Pitch'].", ";} else if ($numtot==7) {echo $row['Pitch']."<br>";} else if ($numtot>4) {echo $row['Pitch'].", ";} else if ($numtot==4) {echo $row['Pitch']."<br> ";} else if ($numtot>1) {echo $row['Pitch'].", ";} else {echo $row['Pitch'];} $numtot--; } } else if ($numtot==10) { $num1 = rand(3,4); if ($num1 == 4){ while ($row = mysql_fetch_array ($result)) { if ($numtot>7) {echo $row['Pitch'].", ";} else if ($numtot==7) {echo $row['Pitch']."<br>";} else if ($numtot>4) {echo $row['Pitch'].", ";} else if ($numtot==4) {echo $row['Pitch']."<br> ";} else if ($numtot>1) {echo $row['Pitch'].", ";} else {echo $row['Pitch'];} $numtot--; } } else { $num2 = rand(3,4); if ($num2 == 4) { while ($row = mysql_fetch_array ($result)) { if ($numtot>8) {echo $row['Pitch'].", ";} else if ($numtot==8) {echo $row['Pitch']."<br>";} else if ($numtot>4) {echo $row['Pitch'].", ";} else if ($numtot==4) {echo $row['Pitch']."<br> ";} else if ($numtot>1) {echo $row['Pitch'].", ";} else {echo $row['Pitch'];} $numtot--; } } else { while ($row = mysql_fetch_array ($result)) { if ($numtot>8) {echo $row['Pitch'].", ";} else if ($numtot==8) {echo $row['Pitch']."<br>";} else if ($numtot>5) {echo $row['Pitch'].", ";} else if ($numtot==5) {echo $row['Pitch']."<br> ";} else if ($numtot>1) {echo $row['Pitch'].", ";} else {echo $row['Pitch'];} $numtot--; } } } } else if ($numtot==11) { $num1 = rand(3,4); if ($num1 == 4){ while ($row = mysql_fetch_array ($result)) { if ($numtot>8) {echo $row['Pitch'].", ";} else if ($numtot==8) {echo $row['Pitch']."<br>";} else if ($numtot>4) {echo $row['Pitch'].", ";} else if ($numtot==4) {echo $row['Pitch']."<br> ";} else if ($numtot>1) {echo $row['Pitch'].", ";} else {echo $row['Pitch'];} $numtot--; } } else { $num2 = rand(3,4); if ($num2 == 4) { while ($row = mysql_fetch_array ($result)) { if ($numtot>8) {echo $row['Pitch'].", ";} else if ($numtot==8) {echo $row['Pitch']."<br>";} else if ($numtot>5) {echo $row['Pitch'].", ";} else if ($numtot==5) {echo $row['Pitch']."<br> ";} else if ($numtot>1) {echo $row['Pitch'].", ";} else {echo $row['Pitch'];} $numtot--; } } else { while ($row = mysql_fetch_array ($result)) { if ($numtot>9) {echo $row['Pitch'].", ";} else if ($numtot==9) {echo $row['Pitch']."<br>";} else if ($numtot>5) {echo $row['Pitch'].", ";} else if ($numtot==5) {echo $row['Pitch']."<br> ";} else if ($numtot>1) {echo $row['Pitch'].", ";} else {echo $row['Pitch'];} $numtot--; } } } } else if ($numtot==12) { $num1 = rand(3,4); if ($num1 == 4){ while ($row = mysql_fetch_array ($result)) { if ($numtot>9) {echo $row['Pitch'].", ";} else if ($numtot==9) {echo $row['Pitch']."<br>";} else if ($numtot>5) {echo $row['Pitch'].", ";} else if ($numtot==5) {echo $row['Pitch']."<br> ";} else if ($numtot>1) {echo $row['Pitch'].", ";} else {echo $row['Pitch'];} $numtot--; } } else { while ($row = mysql_fetch_array ($result)) { if ($numtot>10) {echo $row['Pitch'].", ";} else if ($numtot==10) {echo $row['Pitch']."<br>";} else if ($numtot>7) {echo $row['Pitch'].", ";} else if ($numtot==7) {echo $row['Pitch']."<br> ";} else if ($numtot>4) {echo $row['Pitch'].", ";} else if ($numtot==4) {echo $row['Pitch']."<br> ";} else if ($numtot>1) {echo $row['Pitch'].", ";} else {echo $row['Pitch'];} $numtot--; } } } ?>