2014-09-19 19 views
0

我對PHP仍然很陌生,所以我想知道我是否可以得到一些幫助?我應該創建一個圖表,通過一個使用while循環的foreach循環遍歷一個關聯數組。但是我一直處於無限循環之中,我不完全確定如何解決它。我也懷疑if語句條件沒有幫助,但我也不知道。我錯過了什麼,有沒有更好的方法去解決這個問題?試圖在while循環內部使用foreach循環,不斷得到無限循環

下面的代碼有問題:

<?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

什麼是while循環的目的是什麼? – sectus 2014-09-19 03:38:33

+2

'if($ key!== ['seats'] || ['deprec'] || ['freq'])'應該是'if($ key!== ['seats'] || $ key! == ['deprec'] || $ key!== ['freq'])'或者這個效果取決於你真正想要的東西 – mseifert 2014-09-19 03:40:11

+0

你的循環將永遠。運行,因爲它會發現condtion是真實的。 while($ condtion)運行代碼。意味着直接運行此條件,如果條件始終爲假,則條件爲真。它會一直運行。 – 2014-09-19 03:40:14

回答

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 2014-09-19 03:41:32

+0

謝謝您花時間回答這個問題! – Nick 2014-09-19 03:47:07

+0

@Nick是否適合你? – 2014-09-19 03:47:33

1

Blank's answer應該適合你。我的實際上應該是一個評論,但在答案中格式化代碼要容易得多。

如果使用while僅僅是一個家庭作業或測試的惱人的要求(根據您的評論......),你可以簡單地解決它:

$finished = false; 

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

    $finished = true; 
} 
+0

那是真的...... !! :) – 2014-09-19 06:48:59