0

コードを編集しました。以下を参照してください。

途中で時間の配列を実行しようとしています。$distance は正しく機能します。

これで、"ete" は各レグに対して次の結果を示します: NaN Hrs. NaN 分。

distance を 1500 に置き換えて結果を吐き出しました。それは、この [new Array();] が問題であると私に信じさせます。

さらに掘り下げました var distance = new Array(""); 私にこの結果を与えています: 431,910,746,923 それは内破が機能しなかったということですか?

<script type="text/javascript">
var distance = new Array(<?=implode(', ', $distance)?>);
function Aircraft() {
    var mylist = document.getElementById("myList");
    for(var i = 0; i < distance.length; i++) {
        var hour = (Math.floor(1500 / mylist.options[mylist.selectedIndex].value));
        var minute = Math.round((Math.round(1500 / mylist.options[mylist.selectedIndex].value) - hour) * 60);
        document.getElementById("ete" + i).innerHTML = hour + " Hrs. " + minute + " Mins.";
    }
    }
</script>

私たちは近づいていると思います...

 $distance = array();
 for($i = 0, $size = sizeof($Row1); $i < ($size - 1); ++$i){


 $distance[$i] = ROUND((ACOS(SIN($Row2[$i][4] * PI() / 180) * SIN($Row1[$i][4] * PI() / 180) + COS($Row2[$i][4] * PI() / 180) * COS($Row1[$i][4] * PI() / 180) * COS(($Row2[$i][5] - $Row1[$i][5]) * PI() / 180)) * 180 / PI()) * 60 );

 echo "<td width=100>" . $distance[$i] . " NM</td>";
 echo "<td width=100><span id=\"ete" . $i . "\"></span></td>";
 }

 ?>
 <script type="text/javascript">
var distance = new Array(<?=implode(', ', $distance)?>);
function Aircraft() {
    var mylist = document.getElementById("myList");
    for(var i = 0; i < distance.length; i++) {
        var hour = (Math.floor(distance / mylist.options[mylist.selectedIndex].value));
        var minute = Math.round((Math.round(distance / mylist.options[mylist.selectedIndex].value) - hour) * 60);
        document.getElementById("ete" + i).innerHTML = hour + " Hrs. " + minute + " Mins.";
    }
     }

Aircraft() が使用される場所は次のとおりです。

 <select id=\"myList\" style=\"width:150px;\" onchange=\"Aircraft()\">
 <option>Select Aircraft</option>
 <option value=\"300\">King Air 350</option>
 <option value=\"450\">G-V</option>  
 <option value=\"470\">GLEX</option>
 <option value=\"350\">Astra</option>
 </select>
4

3 に答える 3

2

直接の質問への回答ではありませんが、PHP で次のようなコードを記述する必要はありません。

for($i = 0, $size = sizeof($Row1); $i < $size; ++$i){
if ($i < ($size-1)){

    $Row1[$i]['a']...
    $Row2[$i]['b']...
}
}

foreach()配列を反復処理するために使用できます。

foreach ($Row1 as $k => $r1){
    $r2 = $Row2[$k];

    $r1['a']...
    $r2['a']...
}

それはさておき、あなたのコードはいくつかの理由であなたが望むことをしません。ループが実際に複数回実行されると仮定すると、すべて呼び出される複数の関数が作成されますAircraft()。関数名は一意である必要があります。実際に関数を実行していると仮定すると、関数の最も最近に定義されたバージョン (つまり、最後のバージョン) のみが実行されます。おそらく次のようなものが必要です。

<table>
<?
    # output table cells we will populate
    foreach (....){
        echo "<tr>";
        echo "<td id=\"$id\"></td>";
        echo "</tr>";
    }
?>
</table>

<script>
function Aircraft(distance, id){
    body of javascript here,
    inserts results into element with ID of `id`
}

<?
    # now output calls to the JS function that will produce the output
    foreach (....){

        $distance = ...;
        echo "Aircraft($distance, $id);\n";
    }
?>
</script>
于 2012-04-09T02:42:23.857 に答える
0

解決しました:

<script type="text/javascript">
var distance = new Array("<?php echo implode('","',$distance)?>");
function Aircraft() {
    var mylist = document.getElementById("myList");
    for(var i = 0; i < distance.length; i++) {
        var hour = (Math.floor(distance[i] /     mylist.options[mylist.selectedIndex].value));
        var minute = Math.round(((distance[i] / mylist.options[mylist.selectedIndex].value) - hour) * 60);
        document.getElementById("ete" + i).innerHTML = hour + " Hrs. " + minute + " Mins.";
    }
    }
</script>
于 2012-04-09T13:57:33.910 に答える
0

私の理解が正しければ、選択した航空機に応じて、さまざまな距離についていくつかの推定時間を計算したいと考えています。

これを実現するために、距離を含む JavaScript 配列を保存できます。次に、Aircraft()関数は、新しい ETA を埋めるさまざまなスパンを反復処理するだけで済みます。

コードの最初のブロックを次のように置き換えてみてください。

<?php

$distance = array();
for ($i = 0, $size = sizeof($Row1); $i < ($size - 1); ++$i) {
    $distance[$i] = ROUND((ACOS(SIN($Row2[$i][4] * PI() / 180) * SIN($Row1[$i][4] * PI() / 180) + COS($Row2[$i][4] * PI() / 180) * COS($Row1[$i][4] * PI() / 180) * COS(($Row2[$i][5] - $Row1[$i][5]) * PI() / 180)) * 180 / PI()) * 60 );

    echo "<td width=100>" . $distance[$i] . " NM</td>";
    echo "<td width=100><span id=\"ete" . $i . "\"></span></td>";
}

?>
<script type="text/javascript">
    var distances = new Array("<?=implode('", "', $distance)?>");
    function Aircraft() {
        var mylist = document.getElementById("myList");
        for(var i = 0; i < distances.length; i++) {
            var hour = (Math.floor(distance / mylist.options[mylist.selectedIndex].value));
            var minute = Math.round((Math.round(distance / mylist.options[mylist.selectedIndex].value) - hour) * 60);
            document.getElementById("ete" + i).innerHTML = hour + " Hrs. " + minute + " Mins.";
        }
    }
</script>
于 2012-04-09T03:24:58.153 に答える