Ver Mensaje Individual
  #7 (permalink)  
Antiguo 22/11/2015, 16:47
Avatar de gonzaherrera77
gonzaherrera77
 
Fecha de Ingreso: noviembre-2015
Mensajes: 60
Antigüedad: 8 años, 6 meses
Puntos: 7
Respuesta: Como recorrer un array y eliminar valores?

Cita:
Iniciado por pateketrueke Ver Mensaje
Bueno, de hecho en tu código original tenías que hacer esto:
Código PHP:
Ver original
  1. // MAL
  2. unset($key);
  3.  
  4. // BIEN
  5. unset($arraytodo[$key]);

Lo digo porque analizando la solución de gonzaherrera77 veo que tiene fallas graves.

Por ejemplo, concatena todas las claves a borrar en una cadena de texto quedando "375" por ejemplo.

Y al recorrer de nuevo la lista (innecesariamente) lo hace carácter a carácter ¿que sucedería si el índice que intentamos borrar es 99?

Pues quedaría una secuencia así "37599" pero se recorrería así "3, 7, 5, 9, 9" lo cual en definitiva es un error de concepto muy grave si se usa dicho código.

Igual quedaría mejor con un sólo loop así:
Código PHP:
Ver original
  1. // MAL
  2. $indiceArray .= $i;
  3.  
  4. // BIEN
  5. unset($nombreProd[$i]);

¡Bingo!
Asi es tenes razón, yo concatene la posicion de del array por que haciendo un unset($nombreProd[$i]); solo me tomaba dos posciones solo hace la 2 y 3 no se por que motivo muestro.

Código PHP:
Ver original
  1. <?php
  2.  
  3.    //Array bidimencional
  4.    $nombreProd = Array (
  5.                         Array ('nombreinv' => 'Motor Lavadero', 'npiezas' => 15),
  6.                         Array ('nombreinv' => 'Empaque olla 4', 'npiezas' => 5 ),
  7.                         Array ('nombreinv' => 'REVISION ASPIRADORAS', 'npiezas' => 0 ),
  8.                         Array ('nombreinv' => 'camara', 'npiezas' => 0 ),
  9.                         Array ('nombreinv' => 'Motor Raul', 'npiezas' => 0 ),
  10.                         Array ('nombreinv' => 'SIN REPARACION', 'npiezas' => 0 )
  11.               );
  12.  
  13. for($i = 0; $i < count($nombreProd); $i++) {
  14.          if($nombreProd[$i]['npiezas'] === 0) {
  15.  
  16.             unset($nombreProd[$i]);
  17.             echo $i.' ';
  18.          }
  19.    }
  20. echo '<br/>';
  21.  
  22. print_r($nombreProd);
  23.  
  24.  
  25. ?>

zerobathory
ahora lo encapsule en una función probalo

Código PHP:
Ver original
  1. <?php
  2.    if(count($_POST)) {
  3.  
  4.  
  5. function limpiarArray($vector) {
  6.    $i = 0;
  7.          foreach($vector as $key) {
  8.             foreach($key as $valor) {
  9.                if($valor == '0') {
  10.                    array_splice($vector, $i, 1);
  11.                    $i--;
  12.                }
  13.             }
  14.             $i++;
  15.          }
  16.             return $vector;
  17.       }
  18. //Invoco a la funcion.
  19. $c  = limpiarArray($_POST['c']);
  20.  
  21. print_r($c);
  22. }
  23. ?>
  24. <!DOCTYPE html>
  25. <html>
  26.    <head>
  27.       <meta charset="utf-8">
  28.       <title>Test</title>
  29.    </head>
  30.    <body>
  31.       <form action="limpiarArray.php" method="post">
  32.             <input type="text" name="c[0]['nombreinv']" value="Motor Lavadora Koblenz">
  33.             <input type="text" name="c[0]['npieza']" value="10"><br />
  34.             <input type="text" name="c[1]['nombreinv']" value="Empaque olla 4">
  35.             <input type="text" name="c[1]['npieza']" value="5"><br />
  36.             <input type="text" name="c[2]['nombreinv']" value="REVISION ASPIRADORAS">
  37.             <input type="text" name="c[2]['npieza']" value="0"><br />
  38.             <input type="text" name="c[3]['nombreinv']" value="camara">
  39.             <input type="text" name="c[3]['npieza']" value="0"><br />
  40.             <input type="text" name="c[4]['nombreinv']" value="SIN REPARACION">
  41.             <input type="text" name="c[4]['npieza']" value="0"><br />
  42.  
  43.             <input type="submit" value="Enviar" />
  44.          </form>
  45.    </body>
  46. </html>

Posiblemente se pueda mejorar, hasta aca llegan mis conocimiento hasta hora.

¡Saludos!

Última edición por gonzaherrera77; 22/11/2015 a las 16:57