我试图整理一个查看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;
}
该方法仅返回“卡片”或“费用”,即使两者都存在。怎么了?
答案 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;
}