2012-04-09 2 views
0

Я отредактировал мой код, см. Ниже:Javascript/PHP Array

Я пытаюсь сделать массив со временем enroute. $ distance работает правильно.

Теперь «ete» дает этот результат для каждой ноги: NaN Hrs. NaN Mins.

Я заменил дистанцию ​​1500, и она выплевывает результат. Это заставляет меня поверить в это [new Array();] - проблема.

Я еще некоторое копал var distance = new Array (""); дает мне этот результат: 431 910 746 923 Означает ли это, что implode не работает?

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

Что вы пытаетесь сделать? – Starx

+0

Массив для $ distance работает на столько ног, сколько я добавляю. Но «ete» только возвращает время для самой последней ноги. Итак, это говорит о том, что массив не настроен должным образом. Любые идеи о том, как это сделать правильно? –

+0

Вместо этого PHP вы можете показать фактические визуализированные HTML и JavaScript? –

ответ

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

Спасибо, Cal, ваш ответ выглядит хорошо, но Im новый для javascript. Я понимаю, что вы имеете в виду, когда вспоминаете самолеты() не один раз. Мне нужно немного больше деталей и шаг за шагом на javascript –

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

Мне не удалось заставить ваш код работать правильно. $ Расстояние [$ я]; массив работает, но ete дает мне этот результат: NaN Hrs. NaN Mins. Есть идеи? –

+0

см. Мой обновленный код наверху –

+0

Извините, котировки отсутствовали, но вы поняли это. Во всяком случае, вы могли бы принять мой ответ?Довольно, пожалуйста? – MrFusion

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>