gpt4 book ai didi

Php/MySQL 随机数据(音高)序列

转载 作者:行者123 更新时间:2023-11-29 13:49:11 25 4
gpt4 key购买 nike

因为我是一个音乐迷(但只是一个初级编码员),所以我编写了这个脚本来随机选择一些音调(从 MySQL 表中)(以帮助非正式的串行风格作曲。)它给出 9-12 个不重复的音调音高名称分为 3-4 组,每组 3-4 个音高。例如:C、Eb、Gb(断裂)A、D、F、Db(断裂)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--;
}
}
}


?>

最佳答案

由于可能的分布是有限的、已知的且不是很多,因此您可以创建它们的哈希查找,然后可以从中随机选择一个。此代码未经测试,但原则上应该可以工作:

$dists = array(
array(array(3,3,3)),
array(array(4,3,3),array(3,4,3),array(3,3,4)),
array(array(4,4,3),array(4,3,4),array(3,4,4)),
array(array(4,4,4),array(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);

$index = $numtot - 9;
$dist = $dists[$index][array_rand($dists[$index])];

$i = 1;
$j = 0;
$out = '';
while ($row = mysql_fetch_array ($result)) {
$out .= $row['Pitch'];
if ($i == $dist[$j]) {
$out .= '<br>';
$i = 1;
$j++;
} else {
$out .= ',';
$i++;
}
}
echo $out;

关于Php/MySQL 随机数据(音高)序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16938688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com