检查数组元素是否具有特定值

时间:2012-07-03 23:17:41

标签: php arrays codeigniter

我试图整理一个查看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;
        }

该方法仅返回“卡片”或“费用”,即使两者都存在。怎么了?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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;
}