如何扫描数组,当数字变为false时停止扫描,并在PHP中返回使循环变为false的数字


How do I scan an array and stop the scan when the number becomes false, and echo what number made the loop false in PHP

基本上,我用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查询中使用它,然后从数组中删除它。问题解决了!!