2014-09-19 1 views
0

Я все еще очень новичок в PHP, поэтому мне было интересно, смогу ли я получить какую-то помощь? Я должен создать диаграмму путем итерации через ассоциативный массив, используя цикл while с циклом foreach внутри него. Но я продолжаю получать бесконечный цикл, и я не совсем уверен, как его исправить. Я также подозреваю, что условия утверждения if не помогают, но я тоже не знаю. Что мне не хватает, и есть ли лучший способ сделать это?Пытаясь использовать цикл foreach внутри цикла while, продолжайте получать бесконечный цикл

Вот код в вопросе:

<?php 
include 'davesinventory.php'; 
$delimiter = " \n"; 
$inventory['name'] = rtrim(strtok($data, $delimiter)); 
$inventory['year'] = rtrim(strtok($delimiter)); 
$inventory['serial'] = rtrim(strtok($delimiter)); 
$inventory['seats'] = rtrim(strtok($delimiter)); 
$inventory['charge'] = rtrim(strtok($delimiter)); 
$inventory['days'] = rtrim(strtok($delimiter)); 
$inventory['rev'] = rtrim(strtok($delimiter)); 
$inventory['orig'] = rtrim(strtok($delimiter)); 
$inventory['miles'] = rtrim(strtok($delimiter)); 
$inventory['deprec'] = rtrim(strtok($delimiter)); 
$inventory['freq'] = rtrim(strtok($delimiter)); 

printf("<b> VEHICLE\tYEAR\t SERIAL#\t RENT COST\t DAYS OUT\t REVENUE\t ORIG. PRICE\t MILEAGE\t NOTES\n</b>"); 
?> 
<hr> 
<?php 
while($inventory['name']){ 
    foreach($inventory as $key => $vehicles){ 
     if ($key !== ['seats'] || ['deprec'] || ['freq']) 
      { 
      print $vehicles; 
      } 
      else if($key == ['seats'] || ['deprec'] || ['freq']) 
      { 
      echo " "; 
      } 
    } 
} 
?> 
<pre> 

Вот файл, что 'включить' не требует:

<?php 
$data = 
"DodgeAvenger 2006 DA111-9 4 35.50 105 3727.50 21297.00 8795 .20 Monthly 
Olds_Alero 2004 OA340-1 5 29.95 126 3773.70 23335.00 36010 .20 Monthly 
Chry_PT_Crsr 2003 CPTC-MW2 4 37.95 26 986.70 15405.00 29020 .20 Weekly 
Cadillac_Limo 1999 1999-01 18 142.50 4 570.00 38900.00 187419 .10 Weekly 
Chev_M_Carlo 1997 CMC-21 6 27.30 55 1501.50 19437.50 113689 .20 Monthly 
Chev_Suburban 1997 CSB-011 8 42.75 17 726.75 29999.00 137560 .20 Monthly 
VW_Bus_T2A 1977 VWB-09 32 15.00 16 240.00 12000.00 397800 NA Daily 
Ford_Stn_Wgn 1976 FSW-67 8 10.95 6 65.70 9899.00 149379 NA Whenever 
Toy_Forklift 1997 6FGCU-45 1 61.25 65 3981.25 8795 732 .10 Yearly 
Cat_Dozer(D7H) 1989 1989-11 1 98.00 5 490.00 67850.00 1304 .10 Yearly 
"; 
?> 
+0

Какова цель в то время цикла? – sectus

+2

'if ($ key! == ['places'] || ['deprec'] || ['freq'])' должно быть 'if ($ key! == ['seat'] || $ key! == ['deprec'] || $ key! == ['freq']) 'или что-то в этом роде в зависимости от того, что вы действительно хотите – mseifert

+0

Ваша петля всегда будет. как он собирается найти condtion, чтобы быть правдой. в то время как ($ condtion) запускает код. означает выполнение этого до тех пор, пока условие не будет истинным, если условие всегда ложно. Чем он побежит всегда. –

ответ

2

Нет необходимости использовать while цикл здесь. Foreach достаточно

<?php  
    if(isset($inventory['name'])){ 
     foreach($inventory as $key => $vehicles){ 
      if ($key !== 'seats' || $key !=='deprec' || $key !=='freq') 
      { 
       print $vehicles; 
      } 
      else{ 
       echo " "; 
      } 
     } 
    } 
?> 
+0

вы должны исправить свои неправильные утверждения 'if'. – Barmar

+0

Спасибо, что нашли время ответить на это! – Nick

+0

@ Ник - это то, что сработало для вас? –

1

Blank's answer должны работать для вас. Мой должен быть комментарием, но гораздо легче форматировать код в ответе.

При использовании while это просто раздражает требование для домашней работы или теста (в зависимости от вашего комментария ...), вы можете просто работать вокруг него:

$finished = false; 

while (!$finished) 
{ 
    //do all the work here - foreach loop and so on 

    $finished = true; 
} 
+0

thats true ... !! :) –

Смежные вопросы