0

我试图组合一个方法来查看 Codeigniter 购物车并根据购物车中物品的 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;
        }

即使两者都存在,该方法也只返回“卡”或“费用”。做错了什么?

4

2 回答 2

0

您应该为要检查的每种类型使用布尔标志,然后根据两个标志的值分配字符串(或做任何事情)。在循环之前将它们初始化为 FALSE,然后当您发现每种类型的项目时,将其标志设置为 TRUE。

然后,您可以优化循环以检查两者是否已经为真 和break,以便在前两项各为一项的情况下,您可以跳过其余的。

于 2012-07-03T23:25:24.737 回答
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;
}
于 2012-07-03T23:32:45.560 回答