【问题标题】:Checking if an array element has a particular value检查数组元素是否具有特定值
【发布时间】:2012-07-03 23:17:40
【问题描述】:

我正在尝试组合一个方法来查看 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;
        }

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

【问题讨论】:

  • 回声在 foreach 循环之外,所以它只显示它看到的最后一个$type。是这个问题吗?
  • @drew010 是的,这似乎是问题

标签: php arrays codeigniter


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您的代码通过了第一个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;
    }
    

    【讨论】:

    • 我一开始是这么认为的,但仔细想想,这些条件应该永远不会相互冲突。
    猜你喜欢
    • 2023-04-05
    • 2022-06-25
    • 2017-10-29
    • 2012-03-13
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多