2012-07-03 101 views
0

正在嘗試放在一起,看起來通過笨購物車,並確定交易的基礎上在車檢查如果一個數組元素具有特定值

繼承人的方法

的物品的ID的類型的方法
function parse_transaction_type() { 
      $card_skus = array("MYU_SC1","MYU_SC2","MYU_SC3"); 
      $fee_skus = array("MYU_SF1","MYU_AD1","MYU_AD2"); 
      foreach ($this->cart->contents() as $key => $item) { 
       if(in_array($item['id'], $card_skus) && in_array($item['id'], $fee_skus)) 
       { 
        $type = "fees-cards"; 
       } 
       if (in_array($item['id'], $card_skus) && !in_array($item['id'], $fee_skus)) 
       { 
        $type ="cards"; 
       } 
       if (in_array($item['id'], $fee_skus) && !in_array($item['id'], $card_skus)) 
       { 
        $type ="fees"; 
       } 
      } 

      echo $type; 
     } 

即使兩者都存在,該方法只返回「卡」或「費用」。什麼做錯了?

+0

echo在foreach循環之外,所以它只顯示它看到的最後一個'$ type'。這是問題嗎? – drew010

+0

@ drew010是的,這似乎是問題 – MrFoh

回答

0

您應該爲每個正在檢查的類型使用布爾標誌,然後根據這兩個標誌的值分配字符串(或做任何事情)。在循環之前將它們初始化爲FALSE,然後當您發現每種類型的項目時,將其標記設置爲TRUE。

然後,您可以優化循環以檢查兩者是否都爲真,並且在前兩項是其中一項的情況下,可以跳過其餘項。

0

您的代碼通過了第一個if,因爲該術語在兩者中。該腳本繼續到您的第二個if,它再次通過並重新分配$type您應該使用else if代替。

parse_transaction_type() { 
    $card_skus = array("MYU_SC1","MYU_SC2","MYU_SC3"); 
    $fee_skus = array("MYU_SF1","MYU_AD1","MYU_AD2"); 
    foreach ($this->cart->contents() as $key => $item) { 
    if(in_array($item['id'], $card_skus) && in_array($item['id'], $fee_skus)){ 
     $type = "fees-cards"; 
    } 
    else if (in_array($item['id'], $card_skus) && !in_array($item['id'], $fee_skus)){ 
     $type ="cards"; 
    } 
    else if (in_array($item['id'], $fee_skus) && !in_array($item['id'], $card_skus)){ 
     $type ="fees"; 
    } 
    } 
    echo $type; 
} 
+0

這就是我認爲這是第一次,但考慮到它後,這些條件不應該相互衝突。 –

相關問題