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

チェックするタイプごとにブールフラグを使用してから、2つのフラグの値に基づいて文字列を割り当てます(または何でもします)。ループの前にそれらをFALSEに初期化し、各タイプのアイテムを見つけたら、そのフラグをTRUEに設定します。

次に、ループを最適化して、両方がすでにtrueであるかどうかを確認breakし、最初の2つの項目がそれぞれ1つである場合は、残りをスキップできます。

于 2012-07-03T23:25:24.737 に答える
0

if用語が両方に含まれているため、コードは最初に合格します。スクリプトは2番目に続き、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 に答える