Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/11/2014, 16:01
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Recorrer un array dentro de un foreach

Hace poco se me presentó un caso similar en el trabajo, en el cual, tenía un array que contenías arrays de información (un array asociativo), con la particularidad de que, cada array hijo, contenía la información de todos los registros a actualizar y no los tenías por separado, en otras palabras, tenía algo como esto:

Código PHP:
Ver original
  1.     'nombre' => Array( //Nombres
  2.         0 => 'Juan',
  3.         1 => 'Luis',
  4.         2 => 'José'
  5.     ),
  6.     'apellido' => Array( //Apellidos
  7.         0 => 'Pérez',
  8.         1 => 'Gonzáles',
  9.         2 => 'Gómez'
  10.     ),
  11.     'id' => Array( //IDs
  12.         0 => 25,
  13.         1 => 3,
  14.         2 => 159
  15.     ),
  16.     'usuario' => 123
  17. )

Y como hace un tiempo leí que ejecutar consultas SQL en un bucle con PHP no era muy eficiente que digamos, decidí utilizar la sintaxis CASE WHEN THEN END, que es así:

Código MySQL:
Ver original
  1. UPDATE tabla
  2.     nombre = CASE id
  3.         WHEN 25 THEN 'Juan'
  4.         WHEN 3 THEN 'Luis'
  5.         WHEN 159 THEN 'José'
  6.     END,
  7.     apellido = CASE id
  8.         WHEN 25 THEN 'Pérez'
  9.         WHEN 3 THEN 'Gonzáles'
  10.         WHEN 159 THEN 'Gómez'
  11.     END
  12. WHERE usuario = 123

De este modo, actualizo a los tres registros en los dos campos (nombre y apellido), siempre y cuando el usuario que esté realizando la edición, tenga por identificador el '123'.

Para formar la cadena de consulta con PHP, utilicé un bucle con el cual recorrí al primer hijo del bucle padre, excepto al último pues no es un array. Antes de esto, creé dos variables en las cuales iré concatenando los valores. En cada iteración, concateno en cada variable los valores, más o menos así:

Código PHP:
Ver original
  1. //Todos los datos fueron desinfectados antes de llegar a este punto y los extraje del array padre con la función extract()
  2. //El array con los nombres se llama $nombre y el de apellidos, $apellido
  3. $consulta = 'UPDATE tabla SET ';
  4. $nombres = 'nombre = CASE id ';
  5. $apellidos = 'END, apellido = CASE id ';
  6. $condicion = 'WHERE usuario = ' . $usuario;
  7. for ($i = 0, $l = count($nombre); $i < $l; $i++){
  8.     $nombres .= "WHEN " . $id[$i] . " THEN '" . $nombre[$i] . "' ";
  9.     $apellidos .= "WHEN " . $id[$i] . " THEN '" . $apellido[$i] . "' ";
  10. }
  11. $consulta .= $nombres . $apellidos . ' END ' . $condicion;
  12. mysqli_query($conexion, $consulta) or exit ('Se produjo un error');

Ojalá pueda serte de ayuda.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 07/11/2014 a las 06:27 Razón: Me faltaron las 'keys' de los arrays.