Comprobando si un elemento de matriz tiene un valor particular

Estoy tratando de armar un método que mire a través de un carrito de compras de Codeigniter y determine el tipo de transacción en función de la identificación de los artículos en el carrito.

Aquí está el método

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;
        }

El método solo devuelve "tarjetas" o "cargos", incluso cuando ambos están presentes. ¿Qué estoy haciendo mal?

preguntado el 04 de julio de 12 a las 00:07

El eco está fuera del bucle foreach, por lo que solo muestra el último $type que ve. ¿Es ese el problema? -

@drew010 sí, ese parece ser el problema:

2 Respuestas

Debe usar banderas booleanas para cada tipo que esté buscando, luego asigne la cadena (o haga lo que sea) según el valor de las dos banderas. Inicialícelos en FALSO antes de su ciclo, luego, cuando descubra un elemento de cada tipo, establezca su indicador en VERDADERO.

Luego puede optimizar el ciclo para verificar si ambos ya son verdaderos y break, de modo que en el caso de que los dos primeros elementos sean uno de cada uno, se puede saltar el resto.

Respondido 04 Jul 12, 00:07

Su código pasa el primero if porque el término está en ambos. El guión continúa hasta tu segundo if donde pasa de nuevo y reasigna $type Deberías usar else if preferiblemente.

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;
}

Respondido 04 Jul 12, 00:07

Eso es lo que pensé que era al principio, pero después de pensarlo, estas condiciones nunca deberían entrar en conflicto entre sí. - Ayman Safadí

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.