Foros del Web » Programando para Internet » PHP »

Duda con foreach dentro de otro foreach

Estas en el tema de Duda con foreach dentro de otro foreach en el foro de PHP en Foros del Web. Una vez mas, hola a todos! Lo que estoy tratando de hacer esta vez es usar estos dos arrays simples: Código PHP: $codigo =( "001" ...
  #1 (permalink)  
Antiguo 15/02/2012, 10:24
Avatar de Garot  
Fecha de Ingreso: marzo-2010
Ubicación: Mar de Dirac
Mensajes: 121
Antigüedad: 14 años, 1 mes
Puntos: 7
Pregunta Duda con foreach dentro de otro foreach

Una vez mas, hola a todos!

Lo que estoy tratando de hacer esta vez es usar estos dos arrays simples:

Código PHP:
$codigo=("001""002""003");
$descripcion=("descrip_1""descrip_2""descrip_3"); 

Para formar un array bidimensional asi:

Código PHP:
foreach ($_POST as $key => $itens){
            
$i=0;
        foreach (
$_POST[$key] as $valor) {
            
            
$productos[$i]=Array($key=>$valor);
            
$i++;    
    }

Resulta que los dos arrays son enviados a través de un formulario por eso llegan mediante la variable $_POST

El problema es que yo estoy esperando obtener esto:

Código PHP:
Array ( [0] => Array ( [codigo] => 001  [descripcion] => descrip_1)
        [
1] => Array ( [codigo] => 002  [descripcion] => descrip_1
        [
2] => Array ( [codigo] => 003  [descripcion] => descrip_1) ) 

Y lo que obtengo es esto:

Código PHP:
Array ( [0] => Array ( [descripcion] => descripcion 1 )
        [
1] => Array ( [descripcion] => descripcion 2 
        [
2] => Array ( [descripcion] => descripcion 3 ) ) 
Es como si sobreescribiese los resultados, pero no entiendo por que, si tienen asociados nombres diferentes los resultados.

Debe ser algo simple seguro (como siempre ), he llegado a este código increiblemente sin ayuda =) pero aca me he trabado sin remedio =(

Asi que cualquier ayuda es bienvenida!!, desde ya gracias!

Saludos
  #2 (permalink)  
Antiguo 15/02/2012, 10:31
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Duda con foreach dentro de otro foreach

Si tienen el mismo número de elementos, puedes hacer algo así:

Código PHP:
Ver original
  1. <?php
  2. $productos = array();
  3.  
  4. $codigo = array("001", "002", "003");
  5. $descripcion = array("descrip_1", "descrip_2", "descrip_3");
  6.  
  7. foreach ($codigo as $c => $v) {
  8.     $productos[] = array('codigo' => $v, 'descripcion' => $descripcion[$c]);
  9. }
  10.  
  11. echo '<pre>';
  12. print_r($productos);
  13. echo '</pre>';

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 15/02/2012, 10:46
Avatar de Garot  
Fecha de Ingreso: marzo-2010
Ubicación: Mar de Dirac
Mensajes: 121
Antigüedad: 14 años, 1 mes
Puntos: 7
Respuesta: Duda con foreach dentro de otro foreach

Como me confunde ese "foreach" no termino de entender bien su funcionamiento, no se bien lo que has escrito pero sin embargo funciona muy bien.

En realidad voy a enviar muchas mas arrays desde el formulario, por eso queria automatizar la creación del array bidimensional con los dos foreach para que vayan recibiendo las variables que llegan sin importar la cantidad y las fueran procesando.

Pero igual voy a hacer pruebas con tu código.

Se agradece andresdzphp!!
  #4 (permalink)  
Antiguo 15/02/2012, 10:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Duda con foreach dentro de otro foreach

Lo único que hace es contar los elementos, por eso era la pregunta de sí tenían los mismos elementos, recuerda la sintaxis del foreach:

Código PHP:
Ver original
  1. foreach ($arreglo as $contador => $valor_del_arreglo)

$contador es la variable que tiene el número (o valor del "key") en cada vuelta del foreach es por eso que puedes accesar directamente al mismo valor de otro arreglo ($descripcion[$c]) dentro del foreach.

Saludos.
  #5 (permalink)  
Antiguo 15/02/2012, 10:53
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Duda con foreach dentro de otro foreach

Si no estoy mal estás intentando hacer algo como esto:

Código PHP:
Ver original
  1. <?php
  2. $productos = array();
  3.  
  4. //Esto es solo por el ejemplo
  5. $_POST['codigos'] = array("001", "002", "003");
  6. $_POST['descripciones'] = array("descrip_1", "descrip_2", "descrip_3");
  7. $_POST['totales'] = array(2000, 4000, 10000);
  8.  
  9. foreach ($_POST as $c => $v) {
  10.     foreach ($v as $ci => $vi) {
  11.         $productos[$ci][$c] = $vi;
  12.     }
  13. }
  14.  
  15. echo '<pre>';
  16. print_r($productos);
  17. echo '</pre>';

Cita:
Array
(
[0] => Array
(
[codigos] => 001
[descripciones] => descrip_1
[totales] => 2000
)

[1] => Array
(
[codigos] => 002
[descripciones] => descrip_2
[totales] => 4000
)

[2] => Array
(
[codigos] => 003
[descripciones] => descrip_3
[totales] => 10000
)

)
Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 15/02/2012 a las 11:21 Razón: Otro ejemplo
  #6 (permalink)  
Antiguo 15/02/2012, 12:29
Avatar de Garot  
Fecha de Ingreso: marzo-2010
Ubicación: Mar de Dirac
Mensajes: 121
Antigüedad: 14 años, 1 mes
Puntos: 7
Respuesta: Duda con foreach dentro de otro foreach

Gracias GatorV, lo que no entendia era porque en mi ejemplo el $key, me devolvia un nombre y encambio en el primer ejemplo de andresdzphp me devolvia un número, pero ya lo he entendido. En mi ejemplo yo le paso el valor de $_POST, entonces toma como $key a los nombres de los arrays que vienen dentro de $_POST.

Y muchas Gracias andresdzphp eso es justamente lo que queria obtener! Ademas de resolver mi problema me han enseñado a utilizar el "foreach"!

Saludos a todos!

Etiquetas: foreach, formulario, variables
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 22:12.