私はPHPを初めて使用し、現在このWebページで作業しています。このページでは、フォルダー内の多数のオーディオファイルを読み取り、ユーザーが聞いたことについてのトランスクリプトを作成できます。現時点では、ディレクトリ内のファイルを読み取って、その配列をシャッフルできます。また、ユーザーが次/前のファイルをリッスンできるようにする2つのボタンを実装したかったのです。それは私が今問題を抱えているところです。次のボタンは機能しているようですが、私が望むようには機能していません。問題は、ポインタを1回だけ移動できることです。つまり、最初のファイルから2番目のファイルに移動でき、それ以上進むことはできません。ユーザーがボタンをクリックしたときに呼び出される関数のコードは次のとおりです。functionnextelem(){
var nextElement = "./Sound data/<?php
$current_id = current($files);
$current_index = array_search($current_id, $files);
$next_index = $current_index+1;
echo $files[$next_index];
next($files);
?>";
//Play the next file
document.getElementById('RandomAudio').src=nextElement;
}
問題は、current($ array)関数とnext($ array)関数が値による原則に従って機能することであると推測しています。したがって、関数が呼び出されるたびに、元の配列のコピーが渡されるため、ボタンを押すたびにクリックすると、現在の要素として最初の要素が取得され、next($ array)でポインタを移動しても実際には効果がありません。
だから私は自分のcurrent($ array)とnext($ array)関数を書いてみました:
<?php
function ¤t_by_ref(&$arr) {
return $arr[key($arr)];
}
function &next_by_ref(&$arr) {
return $arr[key($arr)+1];
}
?>;
しかし、これらも役に立ちませんでした。ヘルプやヒントをいただければ幸いです。これは私の神経質になり始めています。(追記:(同じプロジェクトですが同じ問題ではありません)に関するトピックを開きましたが、それは本当に役に立ちました。リンクはここにありますPHP next($ array)とJavascript。すべてのコードをそこに投稿しました。これが最後ではありません。私が現在取り組んでいるバージョンですが、それは私が思うページについてのより多くのアイデアをあなたに与えることができます。とにかくありがとう)
フレオンの答えに基づいて、私はコードを次のように変更しました:
session_start();
$dir = './Sound data';
$files = scandir($dir);
$norp = $_GET['name'];
$current_id = current($files);
$current_index = array_search($current_id, $files);
$_SESSION['current'] = $current_index;
$_SESSION['songlist'] = $files;
$current_song = $_SESSION['current']; //index in songlist for your song
$songlist = $_SESSION['songlist']; //this session var has your $files array
if($norp == 'nextS'){
$current_song++; //changes currentsong to next song
if($current_song == count($songlist))
$current_song = 0;
echo "./Sound data/$songlist[$current_song]";
}
else if($norp == 'prevS'){
$current_song--; //changes currentsong to prev song
if($current_song == count($songlist))
$current_song = 0;
echo "./Sound data/$songlist[$current_song]";
}
?>
と
<script language="JavaScript" type="text/javascript" >
function getNextSong()
{
$.get('getsong.php', {name : 'nextS'}, function(song){
document.getElementById('RandomAudio').src = song;
document.getElementById('filename').innerHTML= song;
// alert(song);
});
}
function getPreviousSong()
{
$.get('getsong.php', {name : 'prevS'}, function(song){
document.getElementById('RandomAudio').src = song;
document.getElementById('filename').innerHTML= song;
// alert(song);
});
}
</script>
しかし、私はまだすぐ次の要素を超えて到達することはできません。私は何か間違ったことをしていますか?