2013-03-03 23 views
1

我有一個看起來像這樣的XML文件:的foreach XML和開關

<services> 
    <service> 
    <code>MODULE_1</code> 
    <name>Regular</name> 
    <price>14.85</price> 
    </service> 

    <service> 
    <code>MODULE_2</code> 
    <name>Express</name> 
    <price>22.50</price> 
    </service> 

</services> 

$result檢索來自另一個服務器上的文件。我的代碼如下所示:

$methods = array() ;  
$xmlQuotes = new SimpleXMLElement($result) ; 

foreach($xmlQuotes as $quote) { 
    $add = 0 ; $f = 0 ; 
    switch ($quote->code) { 
     case "MODULE_1" ; 
     if ((in_array("Regular", $this->allowed_methods))) { 
      $add = MODULE_1_HANDLING ; $f = 1 ; 
      $id = "m_1"; 
      $cost = $quote->price; 
      $description = $quote->name; 
     } 
     break; 

     case "MODULE_2" ; 
     if ((in_array("Express", $this->allowed_methods))) { 
      $add = MODULE_2_HANDLING ; $f = 1 ; 
      $id = "m_2"; 
      $cost = $quote->price; 
      $description = $quote->name; 
     } 
     break; 
    } 

    if (($cost > 0) && ($f == 1)) { 
     $cost = $cost + $add ; 
     $methods[] = array('id' => "$id", 
          'title' => "$description", 
          'cost' => "$cost"); 
    } 
} 

$this->quotes['methods'] = $methods; 

這是所有的好,直到最後一點 - 當我正在使用的代碼,該$methods陣列沒有返回正確$cost$description爲它匹配$code,而是返回我的第一個模塊的價格和描述。它看起來是這樣的:

MODULE_1: Regular: 14.85 
MODULE_2: Regular: 14.85 

我快要瘋了這裏,因爲我顯然不知道我在做什麼,所以任何幫助,將不勝感激。

回答

0

看起來問題在於您的第二個((in_array("Express", $this->allowed_methods)))條件。如果它返回false並且之前的條件if ((in_array("Regular", $this->allowed_methods)))返回true,則成本和描述將始終僅包含其第一個值。

+0

不,這不是它。我只是試圖刪除if(只留下案例),但它沒有做到這一點,它仍然是一樣的。 – user1078494 2013-03-03 00:35:49

+0

順便說一句,這可能會令人困惑 - in_array實際上檢查數據庫中的設置,而不是來自xml文件的設置。 – user1078494 2013-03-03 00:37:53

+0

好的,我們來調試一下。只要把'echo $ cost。 ',''之前'如果(($ cost> 0)blabla'並且提供給我的是什麼回聲 – Hast 2013-03-03 00:41:05

0

想你的代碼,而這些if -statements,然後var_dump($methods),結果是:

Notice: Use of undefined constant MODULE_1_HANDLING - assumed 'MODULE_1_HANDLING' in /in/dTOdQ on line 24 
Notice: Use of undefined constant MODULE_2_HANDLING - assumed 'MODULE_2_HANDLING' in /in/dTOdQ on line 33 

array(2) { 
    [0]=> 
    array(3) { 
    ["id"]=> 
    string(3) "m_1" 
    ["title"]=> 
    string(7) "Regular" 
    ["cost"]=> 
    string(2) "14" 
    } 
    [1]=> 
    array(3) { 
    ["id"]=> 
    string(3) "m_2" 
    ["title"]=> 
    string(7) "Express" 
    ["cost"]=> 
    string(2) "22" 
    } 

實驗用在這裏:http://3v4l.org/dTOdQ