0

私は最近Web開発の学習を開始し、現在、フォルダー内の多数のオーディオファイルを読み取り、ユーザーが聞いたことについてのトランスクリプトを作成できるWebページに取り組んでいます。私は数日前に開始し、phpを介してファイルのリストを取得し、配列をシャッフルすることでランダムファイルを再生(ユーザーに実際に再生させる)することができました(明確にするために、ページが読み込まれるたびにランダムファイルの準備ができています再生されます)。これは正常に機能しているようです。

また、ユーザーが次/前のファイルを聞くことができるボタンを追加したかったのですが、next($array)行を書くときはいつでもどこでもそれは機能せず、さらに悪いことに、shuffle機能も機能しなくなります。タグにphpを使用しているためかどうかはわかりませんが、腸内の何かがそう教えてくれます。

私が十分に明確であったかどうかはわかりませんが、助けていただければ幸いです。だからここに私のコードがあります:

<html>
  <head>
  </head>
  <body>
    <p align="center">
      <button><-</button>
      <audio src="./Sound data/AAA2028C4_0.wav" type="audio/wav" align="center" id="RandomAudio" controls="controls">
      </audio>
      <button name="nextButton" onClick="next()">-></button>
    </p>

    <script language="JavaScript" type="text/javascript">

      <?php
        //Scan the sound data folder for files
        $dir = './Sound data';
        $files = scandir($dir); 
        $random_file = shuffle($files);
      ?>;

      function load(){
        var test = "./Sound data/<?php
        //Select random element from files array    
        echo $files[$random_file];
        ?>";
        //Play a random file
        document.getElementById('RandomAudio').src=test;
      }

      function next(){
        var next = "./Sound data/<?php
        $next_file = next($random_file);
        echo $files[$next_file];
        ?>";
        //Play the next file
        document.getElementById('RandomAudio').src=next;
      }

      window.onload = load;
    </script>

    <form method="post" action="testecho.php" align="center">
      <strong><label>Transcript : </label></strong>
      <br>
      <textarea name ="transcript" rows="2" cols="40"> </textarea>
      <input type="submit" />
    </form>
  </body>   
</html>
4

3 に答える 3

2

PHPパーツはページの読み込み時に一度実行されるため、この方法では実行できません。PHP配列をJSONに変換し、PHPを使用せずにJSから直接使用してみてください。

于 2012-10-28T16:13:19.463 に答える
2

使用する機能ごとに、マニュアルをご覧ください。それは彼らに慣れるのに役立ちます。

通過しましょう:

$random_file = shuffle($files);

shuffle関数はTRUEまたはを返しますFALSE。したがって、$random_file変数は、配列$filesが正常にシャッフルされたかどうかに関係なく情報になります。

echo $files[$random_file];

したがって、完全に偽物です。$filesすでにシャッフルされており、または です。ただし、配列キーは整数または文字列です。$random_fileTRUEFALSE

私はあなたがそれを修正する方法を理解していると確信しています。

同様にnext

$next_file = next($random_file);
echo $files[$next_file];

シャッフルされた配列である$next_file場合はすでに次のファイルですが(そうではありません。上記を参照)、次の行でキーとして使用する必要はありません。$random_file$files

echo $files[$next_file];

それは意味がありません。コードを段階的に記述します。のようなデバッグ機能を使用var_dumpして、何が起こっているかを表示します。現在使用している関数のPHPマニュアルを再確認してください。次に、コードを1行ずつ記述すれば、すぐに準備が整い、多くのことを学ぶことができます。

盲目的に飛ばないでください。各関数呼び出しの前後に印刷し、関数に期待することが実際に行われたかどうかを確認します。

于 2012-10-28T16:18:08.610 に答える
0

PHPの組み込み関数と競合していますnext。別の名前で試してみてください。

于 2012-10-28T16:11:46.153 に答える