Foros del Web » Programando para Internet » PHP »

problemas al mostrar un array bidimensional

Estas en el tema de problemas al mostrar un array bidimensional en el foro de PHP en Foros del Web. tengo el carrito montado d la siguiente manera: Código PHP: foreach ( $_POST  as  $idarticle  =>  $quantitat ) {      if (!empty( $quantitat ))  {    $carrito []=array( ...
  #1 (permalink)  
Antiguo 04/08/2005, 04:31
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
problemas al mostrar un array bidimensional

tengo el carrito montado d la siguiente manera:

Código PHP:
foreach ($_POST as $idarticle => $quantitat)
{    
 if (!empty(
$quantitat))
 {
  
$carrito[]=array($idarticle,$quantitat);                
 }
}
$_SESSION['carrito']=$carrito
y me gustaria poder mostrarlo en una tabla. pero al crear la tabla la pagina tarda mucho en cargar y al final me da el error de timeout.. aqui dejo la pagina q me tendria q mostrar el array. en la tabla. Que hago mal?

Código PHP:
<table width="75%"align="center" cellspacing=0 cellpadding=0 bgcolor="#CCCCCC" border=0>
    <tr>   
        <td height="10px" width="10px"></td>
        <td height="10px" align="left">
        <p align="left"><a href="index.php?fuseaction=list"><img src="../../../../img/sortir.gif" width="91" height="25" border="0"></a></p>
        </td>
        <td height="10px" align="right">
        <p align="right"><a href="javascript:envia();"><img src="../../../../img/continuar.gif" width="91" height="25" border="0"></a></p>
        </td>
        <td height="10px" width="10px"></td>
    </tr>
    <tr>
        <td height="10px" width="10px"></td>        
        <td align="center" colspan="2"><font size="3"><strong>Comandes</strong></font><p></p>
        <table width="75%" cellpadding="0" cellspacing="0" class="list">
            <tr>
                <td align="left" class="listheader">Codi</td>
                <td align="center" class="listheader">Article</td>
                <td align="center" class="listheader">Quantitat</td>
            </tr>
                        <? 
                        
foreach ($_POST as $idarticle => $quantitat)
                            {    
                            if (!empty(
$quantitat))
                                {
                                    
$carrito[]=array($idarticle,$quantitat);
                                }        
                            }
                        
$_SESSION['carrito']=$carrito;
                        
//echo "<pre>"; 
                        //print_r($_SESSION['carrito']); 
                        //echo "</pre>";
                        
$numarraycount($carrito);
                        for (
$i=0;$i=$numarray;$i++){
                            echo 
"<tr>"
                            echo 
"<td align='left' class=listitem>".$carrito[$i]."</td>";                
                            echo 
"</tr>";
                        }
</
table>
                        
?>
Gracias de nuevo
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #2 (permalink)  
Antiguo 04/08/2005, 06:09
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
todos lo q cargo en el carrito viene mandado por POST desde un formulario... entonces lo guardo en el carrtio y lo q quiero es poder mostrar lo q contiene en una tabla. xo no lo he conseguido y no ser el motivo...
Alguna idea de como hacerlo?

Gracias
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #3 (permalink)  
Antiguo 04/08/2005, 09:47
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
alguien sabe como puedo hacerlo?
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #4 (permalink)  
Antiguo 04/08/2005, 10:23
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 3 meses
Puntos: 5
Ese for que estas usando es incorrecto. Te voy a decir en castellano lo que estás diciendole al motor de PHP en este trozo de código:

Código PHP:
$numarraycount($carrito);
for (
$i=0;$i=$numarray;$i++){
  echo 
"<tr>";
  echo 
"<td align='left' class=listitem>".$carrito[$i]."</td>";                
  echo 
"</tr>";

Le estas diciendo:
1. Almacena la cantidad de elementos del array $carrito en $numarray
2. Hazme una tabla mientras $i sea igual a la cantidad de elementos de array

La condición que colocas es incorrecta. Para recorrer ese array y mostrar una tabla hay que hacerlo con su respectivo bucle foreach, para eso existe. El código para mostrarlo te queda asi:

Código PHP:
foreach($carrito as $key => $value){
  echo 
'<tr>';
  echo 
'<td align="left" class="listitem">'.$value.'</td>';                
  echo 
'</tr>';

Saludos,
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #5 (permalink)  
Antiguo 04/08/2005, 11:27
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
gracias por tu respuesta pero... como tengo 2 valores en el array si pongo lo q tu me dices no me muestra el resultado sino q me pone array. y asi sucesivamente...
Komo puedo hacer para q me muestre bien el resultado... con consultas a bd nunca he tenido problemas al hacerlo... pero con arrays... no estoy muy acostumbrado...
Tengo poka experiencia en arrays... asi q pido disculpas... xo todo se aprende.

Gracias por su atencion.
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #6 (permalink)  
Antiguo 04/08/2005, 11:57
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 3 meses
Puntos: 5
Por favor haz un print_r() de tu array y colocalo aqui.
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #7 (permalink)  
Antiguo 05/08/2005, 01:00
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
el array keda asi:
Array
(
[0] => Array
(
[0] => 1
[1] => 12
)

[1] => Array
(
[0] => 2
[1] => 13
)

[2] => Array
(
[0] => 3
[1] => 14
)

)
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #8 (permalink)  
Antiguo 05/08/2005, 03:49
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
alguna idea d como mostralo en una tabla. El 1er numero es el codigo del articulo y el segundo la cantidad pedida... apartir de aqui tengo q genrar un tabla donde me muestre el codigo y el nombre del articulo y la cantidad respectiva...

Como puedo hacerlo?
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #9 (permalink)  
Antiguo 05/08/2005, 09:11
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 3 meses
Puntos: 5
OK para explotar un array bidimensional lo haces con dos foreach. Es algo complicado de asimilar pero luego te darás cuenta de cómo funciona. Recuerda que un array bidimensional o tridimensional, etc son un array dentro de otro, asi sucesivamente. Fíjate que la estructura de tu array es uno dentro de otro ,por lo tanto deberás explotar primero uno y luego el otro con 2 foreach. El código básico para que explotes tu array es asi:

Código PHP:
foreach($carrito as $key => $value){
  foreach(
$value as $key2 => $value2){
    echo 
'<tr>';
    echo 
'<td align="left" class="listitem">'.$value2.'</td>';                
    echo 
'</tr>';
  }

Es un ejemplo que te mostrará la cantidad correspondiente a ese artículo. Siempre recuerda que la gran mayoría, si no son todas, las funciones de PHP para el manejo de arrays están basadas en arrays UNIdimensionales, por lo que explotarlos de una sola vez es imposible.

Saludos!
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #10 (permalink)  
Antiguo 08/08/2005, 02:05
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
gracia por tu explicacion.
Veo q es una poko liadillo, pero bueno tiempo al tiempo.
A ver te cuento lo q kiero hacer y dime si es factible hacerlo con esa matriz.

Tengo un formulario donde se muestran todos los articulos de unas tiendas. Entonces esas tiendas se conectan a esta web y piden cantidades de los diferentes articulos (es para hacer pedidos). Entonces esa informacion entrada la paso por post a otra pagina donde lo meto todo dentro el carrito. Pero ese carito me gustaria mostrarlo bien, ya q luego les muestro una pagina para q miren si es todo correcto solo con los articulos q le hayan puesto una cantidad, en caso de ser correcto grabo el carrito en una tabla de mysql, y en caso d no ser correcto tengo q volver a la pagina anterior recuperar todos los articulos y las cantidades entradas...

Q opinais?

Gracias por cuqlquier respuesta q podais darme.
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #11 (permalink)  
Antiguo 08/08/2005, 08:28
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 3 meses
Puntos: 5
Lo ideal sería que manejaras tu carrito con SESIONES. Almacenas los datos del visitante y los artículos en SESSION y posteriormente vas llamando a cada variable de sesión cuando la necesites. De esta forma te evitas repetidas consultas a la base de datos. Finalmente, cuando el usuario esté seguro de su compra, entonces insertas los datos de las variables de sesión en la base de datos y listo.

Es la forma más sencilla y común de hacerlo. Además, trabajar con variables de sesión es muy sencillo. El único requerimiento es que tus visitantes tengan las cookies habilitadas para poder moverse por el carrito, esto es debido a que el SID (session id) deberás pasarlo por cookies y no por URL por razones de seguridad.

Saludos,
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #12 (permalink)  
Antiguo 08/08/2005, 09:24
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
una cosa mas...
perdona por mi insitencia pero.. ahora estoy metido de cabeza con esto... y aun no lo tengo mucho por mano...
volviendo al tema array, los datos en el carrito se kedan asi:
Array
Código:
{
    [0] => Array
        (
            [0] => 1
            [1] => 12
        )

}
Lo q me gustaria saber es como mostrar un campo u otro. es decir q me muestre el primer elemento del array q seria el codigo del articulo pedido, o bien escojer el segundo elemento q es la cantidad de ese articulo.
Gracias de antemano,
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #13 (permalink)  
Antiguo 08/08/2005, 19:51
Avatar de Takitei  
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 1.231
Antigüedad: 13 años, 3 meses
Puntos: 5
Simplemente llamas el índice que quieres mostrar, asi:

Código PHP:
echo $carrito[0][0]; 
Lo cual te mostraría el código del artículo; si quieres imprimir la cantidad de artículos:

Código PHP:
echo $carrito[0][1]; 
Saludos,
__________________
Takitei
Ingeniarte.com
DannyHerran.com
"Dadme un punto de apoyo y moveré la tierra" - Arquímedes.
  #14 (permalink)  
Antiguo 09/08/2005, 01:22
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 12 años, 11 meses
Puntos: 10
Buenos dias... poko a poko lo voy pillando...

al final lo he puesto asi:

Código PHP:
<? 
foreach ($_POST as $idarticle => $quantitat)
    {    
    if (!empty(
$quantitat)){
        
$carrito[]=array($idarticle,$quantitat);
    }        
}
$_SESSION['carrito']=$carrito;
$numarraycount($carrito);
for(
$i=0;$i <= $numarray;$i++){
    echo 
'<tr>'
    echo 
'<td align="left" class="listitem">'.$carrito[$i][0].'</td>';                 
    echo 
'<td align="left" class="listitem">'.$carrito[$i][1].'</td>';                 
    echo 
'</tr>'

?>
y parece ser q va bien...

Gracias por todo.

Muchas gracias por tu ayuda Takitei!

__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #15 (permalink)  
Antiguo 29/09/2005, 06:56
 
Fecha de Ingreso: diciembre-2003
Ubicación: Málaga
Mensajes: 495
Antigüedad: 14 años
Puntos: 0
tengo el mismo problema, os lo expongo:

Tengo una pantalla, en la que eliges el numero de combos para realizar una consulta. Ej: si eliges 3, te salen los correspondientes checkboxs con 4 opciones cada uno.

Ahora esos checkbox, cada uno tiene una lista distinta dependiendo de cual elijas:
Ej:

opcion1 opcion2 opcion3 opcion4
-------- ---------- ---------- --------
1 a t 9
2 b y 8
3 c u 7
4 d i 6

Al seleccionar en todos los opciones una opcion(1,2,3 o 4) y pulsar el boton de enviar, se carga en la pagina otro checkbox el cual contiene esas los valores de la opcion principal q has pulsado para cada uno.

//$tp es el checkbox principal, q dependiendo de lo q pulses te sale unas opciones u otras en el secundario

$cont1=0;
echo "<form action='$PHP_SELF?result=1' method='POST' name='formu'>";
foreach ($tp as $a)
{
echo $a;
echo "<tr>";
switch($a)
{
case 7:
combo_1($cont1);
echo "<input type='hidden' name=icode[$cont1] value=7>";
break;

case 2:
combo_2($cont1);
echo "<input type='hidden' name=icode[$cont1] value=2>";
break;

case 3:
combo_3($cont1);
echo "<input type='hidden' name=icode[$cont1] value=3>";
break;

case 5:
combo_4($cont1);
echo "<input type='hidden' name=icode[$cont1] value=5>";
break;
}
echo "</tr>";
$cont1++;
}
}
echo "<tr><td colspan=2 align=center><input type='submit' value='enviar'></form></td></tr>";

La funcion combo... son todas = y hacen lo siguiente

function combo_sp_offer($cont)
{
echo "<select name='ed[$cont]'>";
//consulta q saca todos los resultados
$sql="";
if (!$res=send_sql($db,$sql))
{
echo "No se ha podido realizar la consulta";
exit(0);
}
//hace la query
while($result= mysql_fetch_array($res))
{
echo "<option value='$result[num]'>$result[sent]";
}
echo "</select>";
}
//con esto lo q hace es hacer una serie d combos con el mismo nombre pero con una numeracion.


Cuando se ha pulsa el boton viene aki:

if (!empty($result))
{
foreach ($icode as $b)
{
echo "icode $b - ed $ed<br>";
$query="... where code=$b and num=$ed";
$sql=mysql_query($query);

//al mostrar la query sale bien, pero no me muestra el resultado y me da un error
while($result2 = mysql_fetch_array($sql))
{
echo "<tr><td align=center class='texto'><b>$result2[title]</b><br> $result2[date]</b></td></tr>";
}
//}
$ed++;
}
}

Cuando hago esto me sale un warning: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/html/mailing_stats/dos.php on line 153

Y me muestra los resultados de los 2 siguientes menos el primero:Ej: si tengo 3 opciones puestas, solo me muestra la 2º y la tercerda. La primera no.

He probado lo que ha puesto este hombre pero no me va:

if (!empty($result))
{
$stotal[]=array($ed($cont),$icode($cont));
$numarray=count($stotal);
for($i=0;$i <= $numarray;$i++)
{
echo '<tr>';
echo '<td align="left" class="listitem">'.$stotal[$i][$i].'</td>';
echo '<td align="left" class="listitem">'.$stotal[$i][$i].'</td>';
echo '</tr>';
}

si alguien me pudiera echar una mano... gracias.
  #16 (permalink)  
Antiguo 30/09/2005, 03:20
 
Fecha de Ingreso: diciembre-2003
Ubicación: Málaga
Mensajes: 495
Antigüedad: 14 años
Puntos: 0
se podria hacer sin el array bidimensional???
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 18:04.