2012-04-09 30 views
0

我編輯了我的代碼,如下所示:Javascript/PHP數組

我正在嘗試做一個數組與時間航路。 $距離正常工作。

現在「ete」給出了每條腿的結果:NaN Hrs。 NaN分鐘。

我用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."; 
    } 
    } 

這裏是飛機()時:

<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> 
+1

你到底想幹什麼? – Starx 2012-04-09 02:26:34

+0

$ distance的數組適用於我添加的儘可能多的腿。但「ete」只是回到最後一段時間。所以這告訴我陣列沒有正確安裝。任何想法如何正確地做到這一點? – 2012-04-09 02:32:24

+0

而不是那個PHP,你能顯示實際呈現的HTML和JavaScript嗎? – 2012-04-09 02:38:37

回答

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> 
+0

謝謝卡爾,你的答案看起來不錯,但林新的javascript。我明白你的意思是不止一次地回憶飛機()。我需要更多的細節和一步一步的JavaScript – 2012-04-09 02:48:42

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> 
+0

我無法讓你的代碼正常工作。 $距離[$ i]於;數組的作品,但ete給了我這個結果:NaN小時。 NaN分鐘。有任何想法嗎? – 2012-04-09 12:40:53

+0

在頂部查看我的更新代碼 – 2012-04-09 13:35:56

+0

對不起,引號缺失,但你已經知道了。無論如何,你能接受我的回答嗎?請好嗎? – MrFusion 2012-04-09 18:38:37

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>