Foros del Web » Programando para Internet » PHP »

Problema con array_shift

Estas en el tema de Problema con array_shift en el foro de PHP en Foros del Web. Buenas! Estoy preparando una web y no se me ha podido ocurrir un diseño mas dificil xD necesito imprimir la ultima noticia en un sitio, ...
  #1 (permalink)  
Antiguo 27/05/2009, 05:51
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Problema con array_shift

Buenas!

Estoy preparando una web y no se me ha podido ocurrir un diseño mas dificil xD necesito imprimir la ultima noticia en un sitio, y el resto mas abajo...un amigo me dijo que podia usar el array_shift que cogia el primer resultado de un array pero ordenando por DESC en la consulta pues me cogeria el "ultimo".

Hasta aqui bien e incluso al principio me funcionaba pero meti la lista en un while para imprimir las 3 ultimas noticias y el array_shift ahora no me funciona.

Código sql:
Ver original
  1. SELECT
  2.             n.titulo tit_not,
  3.             n.content,
  4.             n.autor,
  5.             n.fecha,
  6.             n.views,
  7.             n.category,
  8.             nc.imagen,
  9.             COALESCE(COUNT(c.id), 0) total
  10.         FROM fan_noticias n
  11.         JOIN fan_categorias nc ON n.category = nc.titulo
  12.         LEFT JOIN fan_comentarios c ON n.id = c.not_id
  13.         GROUP BY n.id
  14.         ORDER BY n.fecha DESC
  15.         LIMIT 4

He puesto LIMIT 4, imagino que si array_shift quita 1 resultado del array, el while deberia imprimir 3, no 4, no? Aunque esto ultimo es mas bien algo que supongo yo, porque no me funciona xD Dejo la parte del codigo hecho:

Código php:
Ver original
  1. if( $res !== false ) {
  2.     $noticias = array();
  3.     while( $row = mysql_fetch_assoc($res) ) {
  4.         $noticias[] = $row;
  5.     }
  6.     $ultima = array_shift($res);
  7. } else {
  8.     $vacio = "No hay noticias.";
  9. }

La variable $noticias si es un array con resultados ya que el while si que me funciona, imprime las 3 unicas noticias que tengo creadas, lo unico que no funciona es la funcion array_shift, que no devuelve nada. He hecho un print_r de la variable que contiene este resultado y esta vacio. Solo me muestra un error al principio de la pagina:

Tambien dejare la parte del codigo que muestra la ultima noticia por si acaso hago mal ahí o yo que se..

Código html:
Ver original
  1. <!-- Top Story -->
  2.             <div id="topstory" class="box">
  3.                
  4.                 <div id="topstory-img"><img src="<?=$ultima['imagen']?>" width="250" height="180" alt="" /></div> <!-- /topstory-img -->
  5.                
  6.                 <div id="topstory-desc">
  7.                
  8.                     <div id="topstory-title">
  9.                    
  10.                         <h2><a href="#"><?=$ultima['tit_not']?></a></h2>
  11.                    
  12.                         <p class="info"><strong>Autor:</strong> <a href="#"><?=$ultima['autor']?></a> &nbsp;&nbsp;
  13.                         <strong>Fecha:</strong> <?=$ultima['fecha']?> &nbsp;&nbsp;
  14.                         <strong>Categoria:</strong> <a href="#"><?=$ultima['category']?></a>
  15.                         </p>
  16.                        
  17.                     </div> <!-- /topstory-title -->
  18.  
  19.                     <div id="topstory-desc-in">                    
  20.                    
  21.                         <p><?=$ultima['content']?></p>                        
  22.  
  23.                     </div> <!-- /topstory-desc-in -->
  24.                    
  25.                     <div id="topstory-title">
  26.                         <p class="info">
  27.                             <strong><a href="#"><?=$ultima['total']?> Comentarios</a></strong> &nbsp;&nbsp;
  28.                             <strong><?=$ultima['views']?> Visitas</strong></p>
  29.                     </div> <!-- /topstory-title -->
  30.                    
  31.                 </div> <!-- /topstory-desc -->
  32.                
  33.             </div> <!-- /topstory -->

Espero que podais ayudarme...si falta algo por especificar, avisadme. He probado poniendo la variable $ultima dentro de while (si por probar que no quede xD) pero me decia lo mismo.

Saludos y Gracias (:

Última edición por Vendetta; 30/04/2010 a las 16:35
  #2 (permalink)  
Antiguo 27/05/2009, 06:47
Avatar de abidibo  
Fecha de Ingreso: mayo-2009
Mensajes: 121
Antigüedad: 15 años
Puntos: 7
Respuesta: Problema con array_shift

Hola!
Cita:
if( $res !== false ) {
$noticias = array();
while( $row = mysql_fetch_assoc($res) ) {
$noticias[] = $row;
}
$ultima = array_shift($res); //problema
} else {
$vacio = "No hay noticias.";
}
es porque el argumento de array_shift tiene que ser un array, tu pasas el resultado de la query.
Código:
 $ultima = array_shift($noticias);
  #3 (permalink)  
Antiguo 27/05/2009, 07:06
 
Fecha de Ingreso: octubre-2008
Mensajes: 71
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Problema con array_shift

esto te puede orientar para que veas sus usos.

ya que se ve que no te manejas en las funciones query

Código PHP:
$noticias = array();   
while( 
$row mysql_fetch_assoc($res) )
{
$noticias[] =$row;
}
if(
count($noticias)>3){                //solo si tiene mas de 3 noticias
unset($noticias[count($noticias)-1]); //borro el ultimo elemento
}
if(
count($noticias)==or $noticias==null){
echo 
"no hay noticias";
}else{
//muestro mi primera noticia ejemplo:
echo  $noticias[0][0]; //titulo
echo  $noticias[0][1]; //contenido
echo  $noticias[0][2]; //autor
echo  $noticias[0][0]; //fecha ..etc
//segunda noticia.. y etc
echo  $noticias[1][0]; //titulo
echo  $noticias[1][1]; //contenido
echo  $noticias[1][2]; //autor
echo  $noticias[1][0]; //fecha ..etc
}

//despues lo puedes recorrer con un for o while
$i=0;
while(
count($noticias)>$i){
echo  
$noticias[$i][0]; //titulo
echo  $noticias[$i][1]; //contenido
echo  $noticias[$i][2]; //autor
echo  $noticias[$i][0]; //fecha ..etc
$i++;

  #4 (permalink)  
Antiguo 27/05/2009, 08:59
 
Fecha de Ingreso: febrero-2008
Mensajes: 269
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Problema con array_shift

Cita:
Iniciado por abidibo Ver Mensaje
Hola!

es porque el argumento de array_shift tiene que ser un array, tu pasas el resultado de la query.
Código:
 $ultima = array_shift($noticias);
Vaya, tiene logica entonces que no funcione jeje, gracias


Cita:
Iniciado por MegaZord Ver Mensaje
esto te puede orientar para que veas sus usos.

ya que se ve que no te manejas en las funciones query

Código PHP:
$noticias = array();   
while( 
$row mysql_fetch_assoc($res) )
{
$noticias[] =$row;
}
if(
count($noticias)>3){                //solo si tiene mas de 3 noticias
unset($noticias[count($noticias)-1]); //borro el ultimo elemento
}
if(
count($noticias)==or $noticias==null){
echo 
"no hay noticias";
}else{
//muestro mi primera noticia ejemplo:
echo  $noticias[0][0]; //titulo
echo  $noticias[0][1]; //contenido
echo  $noticias[0][2]; //autor
echo  $noticias[0][0]; //fecha ..etc
//segunda noticia.. y etc
echo  $noticias[1][0]; //titulo
echo  $noticias[1][1]; //contenido
echo  $noticias[1][2]; //autor
echo  $noticias[1][0]; //fecha ..etc
}

//despues lo puedes recorrer con un for o while
$i=0;
while(
count($noticias)>$i){
echo  
$noticias[$i][0]; //titulo
echo  $noticias[$i][1]; //contenido
echo  $noticias[$i][2]; //autor
echo  $noticias[$i][0]; //fecha ..etc
$i++;

Vaya, gracias a ti tambien, no habia pensado en hacerlo de esa forma para mostrar una u otra (de hecho, hasta ayer no sabia que se podia mostrar 1 y luego todas las demas en otro sitio) guardare el script para ir revisandolo

Y si, la verdad esque con las consultas voy bastante mal, la mayoria de veces tengo que molestar a un amigo porque la he cagado y no se porque sale el error jeje

Muchas gracias a los dos

Última edición por Vendetta; 27/05/2009 a las 09:07
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 19:30.