Foros del Web » Programando para Internet » PHP »

Matriz transpuesta con bucle foreach

Estas en el tema de Matriz transpuesta con bucle foreach en el foro de PHP en Foros del Web. Hola amigos. Tengo esta función que encontré en internet para transponer una matriz bidimensional. El problema es que está dentro de una función y no ...
  #1 (permalink)  
Antiguo 11/11/2014, 19:17
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 7 meses
Puntos: 0
Matriz transpuesta con bucle foreach

Hola amigos. Tengo esta función que encontré en internet para transponer una matriz bidimensional. El problema es que está dentro de una función y no se como imprimir el resultado. Le anexé un "echo" pero no me muestra nada. Me podrian colaborar y decirmen en que estoy fallando.

Código PHP:
<?php 
function transpose($array) {
    
$transposed_array = array();
    if (
$array) {
        foreach (
$array as $row_key => $row) {
        foreach (
$row as $column_key => $element) {
            
$transposed_array[$column_key][$row_key] = $element;
                }}
    return 
$transposed_array;
        }
    }
echo 
transpose($transposed_array);    
?>
  #2 (permalink)  
Antiguo 12/11/2014, 02:03
 
Fecha de Ingreso: enero-2011
Mensajes: 9
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Matriz transpuesta con bucle foreach

Debes hacer otra función que te la recorra y la pinte:

function printMatriz($matriz){

if ($array) {
foreach ($array as $row_key => $row) {
foreach ($row as $column_key => $element) {
echo $element;
}
echo "\n";
}
}
  #3 (permalink)  
Antiguo 12/11/2014, 02:03
 
Fecha de Ingreso: septiembre-2014
Mensajes: 180
Antigüedad: 9 años, 7 meses
Puntos: 14
Respuesta: Matriz transpuesta con bucle foreach

Si la variable $transposed_array devuelta por transpose() es un array no vas a poder ver el resultado con un "echo". Puedes utilizar la función "print_r":

Código PHP:
Ver original
  1. print_r(transpose($transposed_array))
__________________
Unelink.es - VPS, servidores dedicados, hosting y dominios. 10 años a tu lado.
  #4 (permalink)  
Antiguo 12/11/2014, 03:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Matriz transpuesta con bucle foreach

http://www.forosdelweb.com/f18/pasar...5/#post4653202

Eso es casi repetir el post. Si no lo ves claro repregunta en el mismo hilo.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 12/11/2014, 09:31
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Matriz transpuesta con bucle foreach

HOla json gracias por responder. pues mira: como veo que mi ejemplo no contiene datos en el array pues le incluí datos en el arreglo de la variable $transposed_array e imprimí como me lo sugeriste "print_r(transpose($transposed_array));" pero aún no imprime resultados, queda en blanco. Alguien que me colabore por favor.

Código PHP:
Ver original
  1. <?php
  2. function transpose($array) {
  3.     $transposed_array = array("q","e","d");
  4.     if ($array) {
  5.         foreach ($array as $row_key => $row) {
  6.         foreach ($row as $column_key => $element) {
  7.             $transposed_array[$column_key][$row_key] = $element;
  8.                 }}
  9.     return $transposed_array;
  10.         }
  11.     }
  12.     print_r(transpose($transposed_array));
  13. ?>
  #6 (permalink)  
Antiguo 12/11/2014, 12:03
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Matriz transpuesta con bucle foreach

¿Hay alguna forma de mostrar esta matriz sin necesidad de que esté dentro de una función?
  #7 (permalink)  
Antiguo 12/11/2014, 12:10
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Matriz transpuesta con bucle foreach

Cita:
Iniciado por andre___5025 Ver Mensaje
¿Hay alguna forma de mostrar esta matriz sin necesidad de que esté dentro de una función?
Creo que el problema más grave es que no tienes ni idea de cómo usar una función.

Mira bien el código:
Código PHP:
Ver original
  1. function transpose($array) {
  2.     $transposed_array = array();
  3.     if ($array) {
  4.         foreach ($array as $row_key => $row) {
  5.         foreach ($row as $column_key => $element) {
  6.             $transposed_array[$column_key][$row_key] = $element;
  7.                 }}
  8.     return $transposed_array;
  9.         }
  10.     }
  11.  
  12. // MAL: esta linea no hará nada porque la función transpose() espera que TU LE DES ALGÚN ARGUMENTO PARA QUE FUNCIONE (cosa que no haces)
  13. // además $transposed_array es una variable interna de la función transpose() ¿sabes lo que eso significa?
  14. // finalmente LOS ARRAYS NO SE IMPRIMEN CON "echo"
  15. echo transpose($transposed_array);
  16.  
  17. // BIEN: se supone que transpose() recibe un argumento, un array de filas y columnas al parecer
  18. $mi_array = array(
  19.     'a' => array(
  20.        1 => 'a1',
  21.        2 => 'a2',
  22.        3 => 'a3'
  23.     ),
  24.     'b' => array(
  25.        1 => 'b1',
  26.        2 => 'b2',
  27.        3 => 'b3'
  28.     ),
  29.     'c' => array(
  30.        1 => 'c1',
  31.        2 => 'c2',
  32.        3 => 'c3'
  33.     )
  34. );
  35. var_dump(transpose($mi_array));

¿Se entiende lo que te trato de explicar?

Te sugiero, además, consultar el siguiente manual: http://php.net/manual/es/functions.user-defined.php
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 12/11/2014, 13:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Matriz transpuesta con bucle foreach

Cita:
Iniciado por quimfv Ver Mensaje
http://www.forosdelweb.com/f18/pasar...5/#post4653202

Eso es casi repetir el post. Si no lo ves claro repregunta en el mismo hilo.

pateketrueke

Cita:
Creo que el problema más grave es que no tienes ni idea de cómo usar una función.
Ni leer ejemplos donde no se usa ninguna función... claro que no se usa el foreach estructura imprescindible para que la solución sea valida.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #9 (permalink)  
Antiguo 12/11/2014, 14:54
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Matriz transpuesta con bucle foreach

Amigos. En realidad lo que necesito es que el arreglo definido con la variable $valores no me imprima horizontal sino vertical. es decir, transponer esa matriz.

adjunto imagen de lo que imprime actualmente y el código que se ejecuta:

http://subefotos.com/ver/?94901ca905...25c76eb2bo.jpg

Código PHP:
Ver original
  1. <?php
  2. $items=array("Item1","Item2","Item3");
  3. $experto=array("Jose","Maria","Juan");
  4. $valores=array(1,2,3);
  5. echo "<table border><tr><th>ITEM</th>";      
  6.          foreach($experto as $e=>$valor_exp){
  7.           echo "<th>$valor_exp</th>";
  8.           }
  9.          foreach($items as $i=>$valor_items){
  10.             echo "<tr>";
  11.             echo "<td>$valor_items</td>";
  12.                    foreach($valores as $v => $valor_valores){
  13.                     //foreach ($valor_valores as $y => $elementos){
  14.                         //$valores[$y][$v]=$elementos;
  15.                     echo"<td>$valor_valores</td>";
  16.                     }//}
  17.                     echo "</tr>";
  18.           }
  19.           echo "</tr>";
  20.           echo "</table>";

la idea es que me imprima así:

|ITEM|Jose|Maria|Juan|
|item1|1 |1 |1 |
|item2|2 |2 |2 |
|item3|3 |3 |3 |
  #10 (permalink)  
Antiguo 12/11/2014, 14:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Matriz transpuesta con bucle foreach

Cita:
[...] no me imprima horizontal sino vertical
Vale, ¿y era nuestra obligación adivinar tremenda razón verdad?

Que el resultado que ves en tu navegador sea horizontal o vertical depende del HTML que imprimes.

Primero deberías aprender HTML y definir tu estructura, luego iterar los datos e ir imprimiendo sobre dicha estructura, no al revés.

¿Sabes cómo estructurar el HTML que necesitas?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 12/11/2014, 15:39
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Matriz transpuesta con bucle foreach

hola pateketrueke. no te pongas pesado, no es que tengas la obligación, solamente acudo al foro por que tengo dudas y es algo que no se como resolver. Mira creeme, he pasado dias y dias tratando de hacerlo e investigando por Internet y no he podido. tal vez no soy muy buena en la programación. por este motivo pido colaboración, ayuda, guia, de personas que se les haya presentado un caso parecido y lo hayan logrado resolver para que por favor me expliquen. no estoy buscando que me hagan las cosas. solo pido una colaboración. De todas maneras gracias a todos los que han invertido un poco de su tiempo y han respondido a este POST.

Última edición por andre___5025; 12/11/2014 a las 15:42 Razón: corrección ortografía
  #12 (permalink)  
Antiguo 13/11/2014, 01:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Matriz transpuesta con bucle foreach

@andre___5025 has ejecutado y analizado el ejemplo que te puse en el otro post?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #13 (permalink)  
Antiguo 13/11/2014, 06:56
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Matriz transpuesta con bucle foreach

Hola quimfv. Si ya lo hice de esa forma con ciclos for y funciona, pero traté de hacer los mismo con foreach pero me salen errores.
  #14 (permalink)  
Antiguo 13/11/2014, 07:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Matriz transpuesta con bucle foreach

Cita:
Iniciado por andre___5025 Ver Mensaje
Hola quimfv. Si ya lo hice de esa forma con ciclos for y funciona, pero traté de hacer los mismo con foreach pero me salen errores.
@andre___5025: A estas alturas, creo que ya debes saber que decir "me salen errores" no es información suficiente...

¿Qué errores?
¿En qué contexto?
¿Con qué código?
¿Qué analizaste de los errores que te devuelve, verificaste lo que el error indica?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 14/11/2014, 10:06
 
Fecha de Ingreso: septiembre-2013
Ubicación: Bogota
Mensajes: 139
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Matriz transpuesta con bucle foreach

Si mira gnzsoloyo tengo una matriz con arreglos en php los cuales me listan bien. ahora trato de implementarlo para que los valores numéricos sean transpuestos. Así que implementé el ejemplo en mi código:

Código PHP:
Ver original
  1. <?php
  2. $items=array("Item1","Item2","Item3");
  3. $experto=array("Jose","Maria","Juan","Suma");
  4. $valores=array(1,2,3);
  5. echo "<table border><tr><th>ITEM</th>";      
  6.          foreach($experto as $e=>$valor_exp){
  7.           echo "<th>$valor_exp</th>";
  8.           }
  9.          foreach($items as $i=>$valor_items){
  10.             echo "<tr>";
  11.             echo "<td>$valor_items</td>";
  12.                    foreach($valores as $v => $valor_valores){
  13.                     foreach ($valor_valores as $y => $elementos){
  14.                         $valores[$y][$v]=$elementos;
  15.                     echo"<td>$elementos</td>";
  16.                     }}
  17.                     echo "</tr>";
  18.           }
  19.           echo "</tr>";
  20.           echo "</table>";
  21. ?>


Este es el error que me genera:

Warning: Invalid argument supplied for foreach() in C:\AppServ\www\MATRIX PHP\transponer_matriz.php on line 14

Última edición por andre___5025; 14/11/2014 a las 10:12 Razón: Correccion codigo
  #16 (permalink)  
Antiguo 14/11/2014, 10:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Matriz transpuesta con bucle foreach

A simple vista $valores no es un array de arrays, pero lo tratas de iterar como si así lo fuera.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Etiquetas: bucle, foreach, matriz
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 10:21.