Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] ¿array to string conversion?

Estas en el tema de ¿array to string conversion? en el foro de PHP en Foros del Web. Estoy jugueteando con un paginador. a este paginador le doy unos valores de los que deduce el resto de valores para los botones del paginador. ...
  #1 (permalink)  
Antiguo 26/05/2013, 10:08
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
¿array to string conversion?

Estoy jugueteando con un paginador.

a este paginador le doy unos valores de los que deduce el resto de valores para los botones del paginador.

al pasar los valores a los botones que hay entre los botones adelante y atrás me devuelve el siguiente error:

Array to string conversion in line 271

esa línea es la línea en la que le asigno los valores a la función con los botones HTML

no encuentro el problema puesto que le estoy asignando a botones un valor numérico entero que se corresponde a las páginas que un usuario necesita ver para navegar de una en una hacia delante o hacia atrás.

¿alguien puede ayudarme?

quien necesite más información solo tiene que pedirla y se la doy, gracias!!! :)

la estructura del código es la siguiente:

class_paginacion.php

estas clases las he cambiado y traducido del inglés, se encuentra en
esta web
Código PHP:
Ver original
  1. class Paginacion
  2. {
  3.     public function __construct()
  4.     {
  5.     }
  6.     public function calcular_paginas($filas_totales, $filas_por_pagina, $numero_pagina)
  7.     {
  8.         $arr = array();
  9.         // calcula la última página
  10.         $ultima_pagina = ceil($filas_totales / $filas_por_pagina);
  11.         // asegurarnos de que estamos dentro de los límites
  12.         $numero_pagina = (int) $numero_pagina;
  13.         if ($numero_pagina < 1)
  14.         {
  15.            $numero_pagina = 1;
  16.         }
  17.         elseif ($numero_pagina > $ultima_pagina)
  18.         {
  19.            $numero_pagina = $ultima_pagina;
  20.         }
  21.        
  22.         //calculo el primer valor de LIMIT para el MYSQL
  23.         //el primer valor es para decirle desde qué fila comienza a mostrar resultados
  24.         $desde = ($numero_pagina - 1) * $filas_por_pagina;
  25.        
  26.         //paso a un array el LIMIT para la consulta MYSQL
  27.         //el código original en vez de recibir para el LIMIT la variable $filas_totales
  28.         //recibía la variable $filas_por_pagina, esto ha sido corregido porque daba un error
  29.         //de cálculo
  30.         $arr['limit'] = 'LIMIT '.$desde.',' .$filas_totales;
  31.        
  32.         //paso a array el numero de pagina
  33.         $arr['numero_pagina'] = $numero_pagina;
  34.        
  35.         //si el numero de pagina actual es igual a 1
  36.         if ($numero_pagina == 1)
  37.         {
  38.             //paso a array el valor de la pagina actual
  39.             $arr['previous'] = $numero_pagina;
  40.         }
  41.         //sino, si es diferente el previous es igual a la página actual -1
  42.         else
  43.         {
  44.             $arr['previous'] = $numero_pagina - 1;
  45.         }
  46.        
  47.         //paso a array el limite del "página siguiente"
  48.         if ($numero_pagina == $ultima_pagina)
  49.         {
  50.             $arr['next'] = $ultima_pagina;
  51.         }
  52.         //sino
  53.         else
  54.         {
  55.             //calculo el "pagina siguiente" sumandole a la pagina actual +1
  56.             $arr['next'] = $numero_pagina + 1;
  57.            
  58.             //asigno a un boton de "ir a ultima pagina" el valor de la última pagina
  59.             $arr['last'] = $ultima_pagina;
  60.            
  61.             //asigno a un array la "pagina actual" y la "ultima pagina" para un cuadro
  62.             //informativo de por ejemplo "pagina 1 de 20"
  63.             $arr['info'] = 'Página ('.$numero_pagina.' de '.$ultima_pagina.')';
  64.            
  65.             //devuelve un array con todos los datos que necesitamos para continuar con el ciclo de paginación
  66.             $arr['pages'] = $this->obtener_paginas_circundantes($numero_pagina, $ultima_pagina, $arr['next']);
  67.             return $arr;
  68.         }
  69.     }
  70.     function obtener_paginas_circundantes($numero_pagina, $ultima_pagina, $siguiente)
  71.     {
  72.         $arr = array();
  73.        
  74.         // cuantas paginas circundantes mostrar
  75.         $mostrar = 5;
  76.        
  77.         // al principio
  78.        
  79.         //en caso de solo una pagina
  80.         if ($numero_pagina == 1)
  81.         {
  82.             if ($siguiente == $numero_pagina) return array(1);
  83.            
  84.             //controla que no se rompan las paginaciones circundantes
  85.             for ($i = 0; $i < $mostrar; $i++)
  86.             {
  87.                 //si llega a la última página no genera más botones siguientes
  88.                 if ($i == $ultima_pagina) break;
  89.                
  90.                 //sino suma valores a más botones
  91.                 array_push($arr, $i + 1);
  92.             }
  93.             return $arr;
  94.         }
  95.         // por fin
  96.        
  97.         //si me encuentro en la última página
  98.         if ($numero_pagina == $ultima_pagina)
  99.         {
  100.             //calculo cuantos botones circundantes "anteriores" mostraré
  101.             $comienzo = $ultima_pagina - $mostrar;
  102.            
  103.             //si estoy en la primera página entonces no hay botones
  104.             //circundantes "anteriores" que mostrar
  105.             if ($comienzo < 1) $comienzo = 0;
  106.            
  107.             //calcula el valor para el botón siguiente
  108.             for ($i = $comienzo; $i < $ultima_pagina; $i++)
  109.             {
  110.                 array_push($arr, $i + 1);
  111.             }
  112.             return $arr;
  113.         }
  114.         // en el medio
  115.        
  116.         //calcula botones del medio
  117.         $comienzo = $numero_pagina - $mostrar;
  118.        
  119.         //si está en la página 1 entonces LIMIT comienza a mostrar datos desde 0
  120.         if ($comienzo < 1) $comienzo = 0;
  121.        
  122.         //asigna valores a los botones del medio (circundantes)
  123.         for ($i = $comienzo; $i < $numero_pagina; $i++)
  124.         {
  125.             array_push($arr, $i + 1);
  126.         }
  127.        
  128.         //asigna valores a los botones posteriores de la pagina actual
  129.         for ($i = ($numero_pagina + 1); $i < ($numero_pagina + $mostrar); $i++)
  130.         {
  131.             if ($i == ($ultima_pagina + 1)) break;
  132.             array_push($arr, $i);
  133.         }
  134.         return $arr;
  135.     }
  136. }


controlador.php

Código PHP:
Ver original
  1. //instancio hacia la clase de paginación pasándole los valores que requiere la clase, $paginacion=el nº de filas totales, rows; $datos_por_pagina=los datos que muestra en cada página; $pagina_clase=el nº de pagina actual
  2.  
  3.             $paginar_clase = new Paginacion();
  4.             $a_paginacion = $paginar_clase->calcular_paginas($paginacion, $datos_por_pagina, $pagina_clase);
  5. //este var_dump(); me muestra el siguiente tipo y contenido del array
  6. //array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }
  7.             var_dump($a_paginacion['pages']);
  8.  
  9. //este print_r(); me muestra lo siguiente
  10. //Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
  11.             print_r($a_paginacion['pages']);
  12.            
  13. //al boton paginar hacia atrás le paso el valor previous
  14.             paginar_atras($a_paginacion['previous']);
  15.            
  16. //a los botones intermedios le paso el valor que se encuentra en forma de arreglo recorriendolos con un foreach
  17.  
  18.             foreach($a_paginacion as $a_paginacion)
  19.             {
  20.                 numeros_paginas($a_paginacion['pages']);
  21.             }
  22. //al boton paginar hacia adelante le paso el valor next
  23.  
  24.             paginar_adelante($a_paginacion['next']);
  25. //imprimo un info tipo pagina 1 de 10 por ejemplo
  26.  
  27.             echo $a_paginacion['info'];

Botones HTML
Código PHP:
Ver original
  1. //visual para paginar
  2.     function paginar_atras($ide)
  3.     {
  4.     ?>
  5.         <form method="post" action="blog_index.php">
  6.             <input type="image" src="img/green/arrow-left.png" name="post_atras" value="<?php echo $ide; ?>" />
  7.         </form>
  8.     <?php
  9.     }
  10.  
  11. //botones intermedios en los que me da problema insertar el valor
  12.  
  13.     function numeros_paginas($ide)
  14.     {
  15.     ?>
  16.         <form method="post" action="blog_index.php">
  17.             <input type="submit" name="num_pag" value="<?php echo $ide; ?>"  />
  18.         </form>
  19.     <?php
  20.     }
  21.     function paginar_adelante($ide)
  22.     {
  23.     ?>
  24.         <form method="post" action="blog_index.php">
  25.             <!-- <input type="hidden" name="adelante" value="<?php $ide; ?>" /> -->
  26.             <input type="image" src="img/green/arrow-right.png" name="post_adelante" value="<?php echo $ide; ?>" />
  27.         </form>
  28.     <?php
  29.     }
  #2 (permalink)  
Antiguo 26/05/2013, 10:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: ¿array to string conversion?

¿Me imagino que hay que adivinar la linea exacta del error verdad?

Ya que por ningún lado se ve la linea 271 como dices.

Deberías especificar en el código lo que sucede, con comentarios, de otra forma seguirte el hilo es complicado.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 26/05/2013, 10:18
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: ¿array to string conversion?

Cita:
Iniciado por pateketrueke Ver Mensaje
¿Me imagino que hay que adivinar la linea exacta del error verdad?

Ya que por ningún lado se ve la linea 271 como dices.

Deberías especificar en el código lo que sucede, con comentarios, de otra forma seguirte el hilo es complicado.
oh, gracias por decirmelo, se me pasó indicarlo.

la línea 271 es exactamente la línea 17 del documento HTML.php

la variable $a_paginación es de tipo array, y recorro los valores del índice ['pages']
con el foreach
  #4 (permalink)  
Antiguo 26/05/2013, 10:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: ¿array to string conversion?

Vale, para empezar estás usando mal el foreach() ya que usas la misma variable de ambos lados, eso causaría que después de la primer vuelta el array original quede mal.
Código PHP:
Ver original
  1. // MAL
  2. foreach($a_paginacion as $a_paginacion)
  3.  
  4. // BIEN
  5. foreach($a_paginacion as $a_paginacion_item)
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 26/05/2013, 10:25
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: ¿array to string conversion?

Cita:
Iniciado por pateketrueke Ver Mensaje
Vale, para empezar estás usando mal el foreach() ya que usas la misma variable de ambos lados, eso causaría que después de la primer vuelta el array original quede mal.
Código PHP:
Ver original
  1. // MAL
  2. foreach($a_paginacion as $a_paginacion)
  3.  
  4. // BIEN
  5. foreach($a_paginacion as $a_paginacion_item)
ok, lo corrijo ahora mismo. te dije que la línea 271 es la 20 de controlador.php, me equivoqué es la línea 17 de HTML.php

he corregido el problema ahora me muestra el siguiente error


Warning: Illegal string offset 'pages' in C:\xampp\htdocs\xampp\web\poo\controlador.php on line 198


Notice: Undefined index: pages in C:\xampp\htdocs\xampp\web\poo\controlador.php on line 198


la línea 198 de controlador.php es la línea 20 del extracto que muestro de controlador.php que ahora ha quedado así

Código PHP:
Ver original
  1. foreach($a_paginacion as $a_paginacion_item)
  2.             {
  3.                 numeros_paginas($a_paginacion_item['pages']);
  4.             }
  #6 (permalink)  
Antiguo 26/05/2013, 10:35
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: ¿array to string conversion?

Bueno, el error dentro de la función numero_paginas() es que estás imprimiendo $ide suponiendo que es una cadena, ya que los arrays no se pueden imprimir así, de ahí es que te salga dicho error.

Del foreach() tampoco es posible adivinar que estructura tiene, es lo malo de que no hayas escrito el código tu, ya que si tu no lo entiendes nosotros menos.

Hasta aquí todo está bien:
Código PHP:
Ver original
  1. //este print_r(); me muestra lo siguiente
  2. //Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
  3.             print_r($a_paginacion['pages']);

Pero después el foreach() no sirve de nada, ya que antes usas $a_paginacion['pages'] y después intentas iterar como si fuera otro array y encima pensando que tiene elementos con un índice pages, lo cual es totalmente absurdo.

Código PHP:
Ver original
  1. // MAL
  2.             foreach($a_paginacion as $a_paginacion)
  3.             {
  4.                 numeros_paginas($a_paginacion['pages']);
  5.             }
  6.  
  7. // BIEN
  8. numeros_paginas($a_paginacion['pages']);

Es lo malo de no saber lo que se hace, así no vas a llegar muy lejos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 26/05/2013, 10:47
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: ¿array to string conversion?

Cita:
Iniciado por pateketrueke Ver Mensaje
Bueno, el error dentro de la función numero_paginas() es que estás imprimiendo $ide suponiendo que es una cadena, ya que los arrays no se pueden imprimir así, de ahí es que te salga dicho error.

Del foreach() tampoco es posible adivinar que estructura tiene, es lo malo de que no hayas escrito el código tu, ya que si tu no lo entiendes nosotros menos.

Hasta aquí todo está bien:
Código PHP:
Ver original
  1. //este print_r(); me muestra lo siguiente
  2. //Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
  3.             print_r($a_paginacion['pages']);

Pero después el foreach() no sirve de nada, ya que antes usas $a_paginacion['pages'] y después intentas iterar como si fuera otro array y encima pensando que tiene elementos con un índice pages, lo cual es totalmente absurdo.

Código PHP:
Ver original
  1. // MAL
  2.             foreach($a_paginacion as $a_paginacion)
  3.             {
  4.                 numeros_paginas($a_paginacion['pages']);
  5.             }
  6.  
  7. // BIEN
  8. numeros_paginas($a_paginacion['pages']);

Es lo malo de no saber lo que se hace, así no vas a llegar muy lejos.
sé que utilizar código que no ha escrito uno mismo y sin entenderlo bien no es algo adecuado, pero yo lo he hecho porque estoy intentando controlar los objetos de php, entonces este ejemplo me sirve.

al traducir sus variables y entendiendo lo que hace cada trocito de código agregarle comentarios creo que estoy ejercitando los objetos de php.

aunque sé a qué te refieres, te explico por qué el foreach lo hice así y tú ya me dices.

en la web dice que la clase Paginacion devuelve el siguiente array, es un ejemplo

Código PHP:
Ver original
  1.  
  2. (
  3.  
  4.     [limit] => LIMIT 0,10
  5.  
  6.     [current] => 1
  7.  
  8.     [previous] => 1
  9.  
  10.     [next] => 2
  11.  
  12.     [last] => 7
  13.  
  14.     [info] => Page (1 of 7)
  15.  
  16.     [pages] => Array
  17.  
  18.         (
  19.  
  20.             [0] => 1
  21.  
  22.             [1] => 2
  23.  
  24.             [2] => 3
  25.  
  26.             [3] => 4
  27.  
  28.             [4] => 5
  29.  
  30.         )
  31.  
  32. )

por lo tanto pienso que puedo utilizar $a_paginacion['pages'] recorriendolo con un foreach puesto que contiene no una cadena de caracteres, sino int con números establecidos dinámicamente.

es por eso que primero utilizo $a_paginacion['previous']; luego recorro ['pages'] y por último el botón hacia delante.

¿con un foreach no puedo recorrer el array para ir asignando valores a un botón por iteración del foreach como he hecho?

es que no comprendo por qué no y si me puedes explicar ligeramente por qué o algo de documentación donde pueda leer te lo agradecería muchísimo.

obviamente te agradezco que me ayudes siempre! :D
  #8 (permalink)  
Antiguo 26/05/2013, 10:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: ¿array to string conversion?

Sucede que $a_paginacion es un array, y éste contiene el índice pages de modo que deberías iterarlo así:
Código PHP:
Ver original
  1. foreach ($a_paginacion['pages'] as $n)

¿Ahora se entiende tu error de esa parte?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 26/05/2013, 11:03
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: ¿array to string conversion?

Cita:
Iniciado por pateketrueke Ver Mensaje
Sucede que $a_paginacion es un array, y éste contiene el índice pages de modo que deberías iterarlo así:
Código PHP:
Ver original
  1. foreach ($a_paginacion['pages'] as $n)

¿Ahora se entiende tu error de esa parte?
ahhh ahora sí me dí cuenta del error.

muchísimas gracias.

ahora el paginador cuando llega al final resulta que devuelve error, eso es para otro tema, jajaja. sin duda un placer tu ayuda, siempre breve, conciso y eficaz para resolver dudas y problemas. gracias!!!

Etiquetas: html, mysql, resultados, string
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 15:58.