Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/01/2014, 16:36
rutame
 
Fecha de Ingreso: agosto-2008
Ubicación: Canarias, España - París, Francia
Mensajes: 105
Antigüedad: 13 años, 2 meses
Puntos: 3
Calcular clave de Array

Buenas noches a todos!!

He preguntado en varias ocasiones y aunque todos han sido muy amables en responder, hasta ahora no he logrado realizar lo que busco.

Necesito incrementar la cantidad en un array cuando ese id exista e insertar una nueva array dentro de la array madre, con todos sus campos, cuando no exista.

El problema que se me plantea es ¿cómo calcular la clave $key del array pues a medida que hayan algunas más arrays irá incrementándose?

Pongo el código que estoy usando
Código PHP:
Ver original
  1. if(!empty($_SESSION['carrito']))
  2.         {
  3.             foreach ($_SESSION['carrito'] as $key => $value)
  4.             {
  5.                 echo "1era Iteraccion, KEY ES: ".$key." => VALUE ES: ".$value['idpie']."<br />";
  6.  
  7.                 if(in_array($idpie, $_SESSION['carrito'][$key])){
  8.                     echo "La clave (key) es: ".$key."<br />";
  9.                     $cant = $_SESSION['carrito'][$key]['cantidad'];
  10.                     $cant++;
  11.                     $_SESSION['carrito'][$key]['cantidad'] = $cant;
  12.                     $_SESSION['carrito'][$key]['coste'] = $cant * $_SESSION['carrito'][$key]['precio'] ;
  13.                 }
  14.                 else
  15.                 {
  16.                     echo "Estoy en array_push no encuentra, clave $key y idpie: $idpie <br />";
  17.                     array_push($_SESSION['carrito'], $nuevoProducto);
  18.                 }
  19.             }
  20.         }
  21.         else{
  22.             array_push($_SESSION['carrito'], $nuevoProducto);
  23.         }

Por si sirve de algo, funcionar funciona, con el primer registro va super-bien, incrementa y tal, cuando inserto el segundo, perfecto.
Pego lo que pasa:
Código HTML:
Ver original
  1. 1era Iteraccion, KEY ES: 0 => VALUE ES: 28
  2. Estoy en array_push no encuentra, clave 0 y idpie: 27
  3. SESSION[CARRITO] ESTABLECIDA
  4.  
  5. array (size=2)
  6.   0 =>
  7.     array (size=5)
  8.       'idpie' => string '28' (length=2)
  9.       'nompie' => string 'Muelle Helecoidal' (length=17)
  10.       'precio' => string '41.00' (length=5)
  11.       'cantidad' => int 3
  12.       'coste' => float 123
  13.   1 =>
  14.     array (size=5)
  15.       'idpie' => string '27' (length=2)
  16.       'nompie' => string 'Filtro Aceite No metálico' (length=26)
  17.       'precio' => string '6.00' (length=4)
  18.       'cantidad' => string '1' (length=1)
  19.       'coste' => float 6
Ahora, si el segundo lo vuelvo a meter, se incrementa la cantidad y se inserta una nueva array.

Pego lo que pasa:
Código HTML:
Ver original
  1. 1era Iteraccion, KEY ES: 0 => VALUE ES: 28
  2. Estoy en array_push no encuentra, clave 0 y idpie: 27
  3. 1era Iteraccion, KEY ES: 1 => VALUE ES: 27
  4. La clave (key) es: 1
  5. SESSION[CARRITO] ESTABLECIDA
  6.  
  7. array (size=3)
  8.   0 =>
  9.     array (size=5)
  10.       'idpie' => string '28' (length=2)
  11.       'nompie' => string 'Muelle Helecoidal' (length=17)
  12.       'precio' => string '41.00' (length=5)
  13.       'cantidad' => int 3
  14.       'coste' => float 123
  15.   1 =>
  16.     array (size=5)
  17.       'idpie' => string '27' (length=2)
  18.       'nompie' => string 'Filtro Aceite No metálico' (length=26)
  19.       'precio' => string '6.00' (length=4)
  20.       'cantidad' => int 2
  21.       'coste' => float 12
  22.   2 =>
  23.     array (size=5)
  24.       'idpie' => string '27' (length=2)
  25.       'nompie' => string 'Filtro Aceite No metálico' (length=26)
  26.       'precio' => string '6.00' (length=4)
  27.       'cantidad' => string '1' (length=1)
  28.       'coste' => float 6

Se ve claramente que es como si lo hubiera metido dos veces, en una incrementa la cantidad al cumplirse la condición "in_array()" y ejecuta el "else" porque parece que la Clave ($key) no se encuentra.

A ver si alguien es capaz de ayudarme de forma que lo pueda entender y solucionar, es decir, que me enseñe a "pescar este pez"

Muchas gracias