Foros del Web » Programando para Internet » PHP »

Recorrer array devuelto por función

Estas en el tema de Recorrer array devuelto por función en el foro de PHP en Foros del Web. Hola gente, como va todo?? Esta es la situacion: Con una función, extraigo un serie de campos de una BD que son devueltos mediante un ...
  #1 (permalink)  
Antiguo 13/03/2004, 23:53
 
Fecha de Ingreso: septiembre-2003
Mensajes: 22
Antigüedad: 20 años, 7 meses
Puntos: 0
Recorrer array devuelto por función

Hola gente, como va todo??

Esta es la situacion:

Con una función, extraigo un serie de campos de una BD que son devueltos mediante un array.

Esta es la función:

Código PHP:
Function GetPosts($link)
    {
$sql    "SELECT * FROM posts WHERE status='1' ORDER BY created_on DESC LIMIT 0,10";
$query    mysql_query($sql,$link);
        
$posts    mysql_fetch_array($query);            
        
Return 
$posts;
    } 
Me interesa que la forma en que se puedan mostrar estos resultados sea completamente flexible, por eso decidí usar otra serie de funciones para mostrar cada campo, estas son algunas:

Código PHP:
Function ShowTitle($posts)
    {
        echo 
$posts[title];
    }
Function 
ShowPost($posts)
    {
        echo 
nl2br($posts[body]);
    } 
Hasta ahí todo va bien. Pero el problema que me persigue es que no encuentro la forma de hacer un pasada por todo el array $posts y mostrar todos los campos como lo haría comunmente con un bucle while, así:

Código PHP:
while ($posts    mysql_fetch_array($query))
{
echo 
$posts[title];

Hago énfasis en que quiero hacerlo así que para que despues, quien use este sistema, pueda disponer de funciones individuales para mostrar los datos donde mas le guste.

Alguna idea?
  #2 (permalink)  
Antiguo 14/03/2004, 11:12
Avatar de sism82  
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 20 años, 6 meses
Puntos: 1
usa foreach($posts as $valor)

te va a recorrer el array elemento por elemento hasta terminarse, dentro del ciclo puedes acceder al valor llamando la variable $valor, la cual va ir cambiando de contenido cada ciclo.

O bien puedes hacer $elementos = count($posts);
for($i = 0; $i < $elementos; $i++)

Asi tiene el mismo efecto que el foreach, solo que como es un for normal, accedes al array como $posts[$i]; y tendrías que cambiar tu función que te devuelve el resultSet por mysql_fetch_row para acceder de manera númerica al contenido. No estoy seguro si mysql_fetch_array te permite ambas opciones.

te entendí bien, me expliqué bien? si no hazmelo saber, saludos
  #3 (permalink)  
Antiguo 14/03/2004, 12:07
 
Fecha de Ingreso: septiembre-2003
Mensajes: 22
Antigüedad: 20 años, 7 meses
Puntos: 0
Hola sism82, gracias por tu respuesta.

Yo ya había probado usando un bucle for, pero me repetía siempre los mismos valores, como que el puntero del array se quedaba siempre en el mismo lugar.
Probe con next() y tambien each() pero no pasó nada...
Voy a probar de todos modos usando foreach() a ver que pasa.

Cualquier cosa te vuelvo a preguntar, gracias de nuevo.

BCloud
  #4 (permalink)  
Antiguo 14/03/2004, 20:16
 
Fecha de Ingreso: septiembre-2003
Mensajes: 22
Antigüedad: 20 años, 7 meses
Puntos: 0
Lamentalemente no sigo sin lograr hacer correro el array.

Acá adjunto el código completo.

Código PHP:
<?php
include("admin.inc");

Function 
GetPosts($link)
    {
        
$sql    "SELECT * FROM posts WHERE status='1' ORDER BY created_on DESC LIMIT 0,10";
        
$query    mysql_query($sql,$link);

        echo 
$error;
        
$posts    mysql_fetch_array($query);

        Return 
$posts;
    }
Function 
CountPosts($link)
    {
        
$sqlcount    "SELECT Count(*) AS total FROM posts";
        
$querycount    mysql_query($sqlcount,$link);
        
$count        mysql_fetch_array($querycount);
        
        Return 
$count[total];
    }
Function 
ShowDate($posts)
    {
        echo 
$posts[created_on];
    }
Function 
ShowID($posts)
    {
        echo 
$posts[post_id];
    }
Function 
ShowTitle($posts)
    {
        echo 
$posts[title];
    }
Function 
ShowPost($posts)
    {
        echo 
nl2br($posts[body]);
    }
Function 
ShowExtendedPost($posts)
    {
        echo 
nl2br($posts[extended_body]);
    }
Function 
ShowAuthor($posts)
    {
        echo 
$posts[author_id];
    }
?>

<!-- COMIENZO DE LA MUESTRA DE POSTS -->
<?php
conectar_BD
();
$posts GetPosts($link);
$total count($posts);

$count CountPosts($link);
for (
$p '1'$p $count$p++)
    {    
?>

<strong><?php ShowTitle($posts); ?></strong>
<p><?php ShowPost($posts); ?></p>
<p><?php ShowExtendedPost($posts); ?></p>
<p>Posted by <strong><?php ShowAuthor($posts); ?></strong></p>
<!-- FINAL DE LA MUESTRA DE POSTS -->
<?php
    
}
?>
Espero a alguno se le ocurra algo.

Gracias desde yal
  #5 (permalink)  
Antiguo 15/03/2004, 06:26
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Tu funcion GetPosts() solo devuelve un registro, el primero, lo que devuelve mysql_fetch_array(). Si lo que quieres es que devuelva un array con todos los registros, tienes que hacer el while e ir añadiendolo en un array:
Código PHP:
Function GetPosts($link)

    {
  
$posts=array();

        
$sql    "SELECT * FROM posts WHERE status='1' ORDER BY created_on DESC LIMIT 0,10";

        
$query    mysql_query($sql,$link);



        echo 
$error;

        while (
$post    mysql_fetch_array($query)) {
  
$posts[]=$post;
}



        Return 
$posts;

    } 
Despues recorres el array devuelto con foreach.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 15/03/2004, 19:56
 
Fecha de Ingreso: septiembre-2003
Mensajes: 22
Antigüedad: 20 años, 7 meses
Puntos: 0
Muchísimas gracias Josemi, ahora entendí cual era el procedimiento. Ya puedo seguir.

Muchas gracias de nuevo.

BCloud
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:17.