Foros del Web » Programando para Internet » PHP »

Buscar con in_array en arrays bidimensionales

Estas en el tema de Buscar con in_array en arrays bidimensionales en el foro de PHP en Foros del Web. Buenas noches a todos! Tengo este código en el que busco si un producto ya se ha añadido por el $idpie para que, en caso ...
  #1 (permalink)  
Antiguo 27/01/2014, 15:33
 
Fecha de Ingreso: agosto-2008
Ubicación: Canarias, España - París, Francia
Mensajes: 105
Antigüedad: 15 años, 8 meses
Puntos: 3
Buscar con in_array en arrays bidimensionales

Buenas noches a todos!

Tengo este código en el que busco si un producto ya se ha añadido por el $idpie para que, en caso afirmativo, solo incremente la cantidad y el coste del producto. Lo estoy recorriendo con un foreach pero hace cosas extrañas. Pego código.
Código PHP:
Ver original
  1. include 'conecta.php';
  2.  
  3. //print_r($_POST);
  4.  
  5. if(!empty($_POST['idpie'])){$idpie = $_POST['idpie'];}
  6.  
  7.  
  8. //$carrito = "carrito";
  9. //if(!isset($contador)){$contador = 0;}
  10.  
  11. $sql = mysql_query("SELECT nompie,pvp
  12.                     FROM pieza
  13.                     WHERE idpie = '$idpie' ")
  14.                     or die(mysql_error());
  15.  
  16. $row = mysql_fetch_array($sql);
  17.  
  18. if(!isset($_POST['cantidad'])){
  19.     $cantidad = 1;
  20. }
  21. else{
  22.     $cantidad = $_POST['cantidad'];
  23. }
  24.  
  25. $nompie = $row['nompie'];
  26. $precio = $row['pvp'];
  27. $coste = $precio * $cantidad;
  28.  
  29. //Creamos la matriz asignandoselo a la variable
  30. $nuevoProducto = array();
  31.  
  32. // Añadimos las columnas de la matriz array
  33. $nuevoProducto['idpie'] = $idpie;
  34. $nuevoProducto['nompie'] = $nompie;
  35. $nuevoProducto['precio'] = $precio;
  36. $nuevoProducto['cantidad'] = $cantidad;
  37. $nuevoProducto['coste'] = $coste;
  38.  
  39. // Verificado
  40. if(!isset($_SESSION['carrito'])){
  41.     $_SESSION['carrito'] = array();
  42. }
  43.  
  44. if(isset($_SESSION['carrito']))
  45. {
  46.         if(!empty($_SESSION['carrito']))
  47.         {
  48.             foreach ($_SESSION['carrito'] as $key => $value)
  49.             {
  50.                 if(in_array($idpie, $_SESSION['carrito'][$key])){
  51.                     $cant = $_SESSION['carrito'][$key]['cantidad'];
  52.                     $cant++;
  53.                     $_SESSION['carrito'][$key]['cantidad'] = $cant;
  54.                     $_SESSION['carrito'][$key]['coste'] = $cant * $_SESSION['carrito'][$key]['precio'] ;
  55.                 }
  56.                 if (!in_array($idpie, $_SESSION['carrito'][$key]))
  57.                 {
  58.                     echo "Estoy en array_push no encuentra, clave $key y idpie: $idpie";
  59.                     array_push($_SESSION['carrito'], $nuevoProducto);
  60.                 }
  61.  
  62.             }
  63.         }
  64.         else{
  65.             array_push($_SESSION['carrito'], $nuevoProducto);
  66.         }
  67.  
  68.         echo "Estoy dentro<br>";
  69.         var_dump($_SESSION['carrito']);
  70. }

El primer producto lo introduce bien, si sigo poniendo el mismo producto, se incrementa la cantidad, pero cuando añado uno nuevo añade uno más dos ???

Alguien me puede ayudar?

Muchas gracias
  #2 (permalink)  
Antiguo 27/01/2014, 15:40
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: Buscar con in_array en arrays bidimensionales

revisa si la función in_array soporta recursión, en tal caso debes aplicar una forma recursiva, exceptuando si el array tiene 2 dimensiones exactas, por el cual puedes usar la forma de matriz y hacer 2 ciclos para recorrerlo por completo

PD: no entiendo para que repites el in_array con ! a no ser que cambies en el primer ciclo
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 27/01/2014, 16:37
 
Fecha de Ingreso: agosto-2008
Ubicación: Canarias, España - París, Francia
Mensajes: 105
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: Buscar con in_array en arrays bidimensionales

No entiendo nada de lo que me dices.
Tengo $key porque cambia la clave de la sub-array y por eso la meto en un foreach
Tiene dos dimensiones.

Código PHP:
Ver original
  1. $idpie = $_POST['idpie'];
  2. // tengo $key porque cambia la clave de la sub-array
  3. foreach ($_SESSION['carrito'] as $key => $value)            {
  4. if(in_array($idpie, $_SESSION['carrito'][$key]))
Podrías explicarte mejor, por favor.
Muchas gracias

Última edición por rutame; 27/01/2014 a las 16:39 Razón: Aclarar
  #4 (permalink)  
Antiguo 29/01/2014, 17:22
 
Fecha de Ingreso: agosto-2008
Ubicación: Canarias, España - París, Francia
Mensajes: 105
Antigüedad: 15 años, 8 meses
Puntos: 3
Respuesta: Buscar con in_array en arrays bidimensionales

Cita:
Iniciado por maycolalvarez Ver Mensaje
revisa si la función in_array soporta recursión, en tal caso debes aplicar una forma recursiva, exceptuando si el array tiene 2 dimensiones exactas, por el cual puedes usar la forma de matriz y hacer 2 ciclos para recorrerlo por completo

PD: no entiendo para que repites el in_array con ! a no ser que cambies en el primer ciclo
HOla!

Que no he entendido nada de nada de lo que me has dicho. El array es bidimensional: Un array al que le voy metiendo "filas" arrays:

Ejemplo:
Código PHP:
Ver original
  1.           array('id'=>$id,'nom'=>$nom,'cantidad'=>$cantidad),
  2.           array('id'=>$id,'nom'=>$nom,'cantidad'=>$cantidad)
  3. );

Última edición por rutame; 29/01/2014 a las 17:22 Razón: Explicar de forma más clara todo el tema ya que no entiendo ni papa

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:59.