基本上,我用PHP创建一个简单的音乐播放器,并设置数组中播放的每首歌曲的id。我有一个脚本,它提取一个随机数,并播放带有相应id的歌曲。我想制作它,这样如果歌曲已经播放,它就不会再播放了。
目前,我让它生成一个随机数,如果这个数字已经播放过,那么它会在随机数上加1。
问题是,如果这个数字是随机数加1的结果,它就会再次播放那首歌。我试图将播放的歌曲存储在一个数组中,然后递增数字,直到数组中不存在为止,但我很难找到解决问题的方法。
我的代码如下:
<?php
session_start();
$con=mysqli_connect("blah blah blah");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
if (!isset($_SESSION['played'])) {
$_SESSION['played'] = array();
}
$result = mysqli_query($con,"SELECT * FROM Data") ;
$num_rows = mysqli_num_rows($result);
$numsongs= .20 * $num_rows;
$numsongs=floor($numsongs);
$music = rand(1,$numsongs);
if (in_array($music, $_SESSION['played'])) {$music = $music+1;};
/* goes on to play music below */
$_SESSION['played'][] = $music;
?>
我没有把我的整个剧本放进去,剧本很好,没有重复歌曲。我只附上了我如何写重复脚本的片段,以说明我是如何尝试的
提前感谢!
我想你正在寻找这个。。。
$music = rand(1,$numsongs);
while(in_array($music, $_SESSION['played'])){
$music = $music+1;
echo 'in array '.$music;
}
echo 'Not in array '.$music;
AHAAA!!我想通了!我最终使用了switch(),但形式不同。
if (empty($_SESSION['played1'])) {
for ($i = 1; $i <= $numsongs; ++$i) {
$_SESSION['played1'][] = $i;}}
shuffle($_SESSION['played1']);
$music1= $_SESSION['played1'][0];
$result = mysqli_query($con,"SELECT * FROM Data WHERE position = '$music1'") ;
while($row = mysqli_fetch_array($result)){
$del_val=$row[position];
if(($key = array_search($del_val, $_SESSION['played1'])) !== false) {
unset($_SESSION['played1'][$key]);}
基本上创建了一个介于1和10之间的数组。然后使用switch()对数组进行随机化。然后选择数组中的第一个数字,在mysqli查询中使用它,然后从数组中删除它。问题解决了!!