Foros del Web » Programando para Internet » PHP »

foreach devuelve más de un dato

Estas en el tema de foreach devuelve más de un dato en el foro de PHP en Foros del Web. Hola, he estado todo el fin de semana en este problema que ya resulta antipático. Resulta que el esistema consulta a la BD, trae la ...
  #1 (permalink)  
Antiguo 09/02/2009, 09:46
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
foreach devuelve más de un dato

Hola, he estado todo el fin de semana en este problema que ya resulta antipático. Resulta que el esistema consulta a la BD, trae la info con GET y luego los traigo con un foreach. Funciona perfecto si no fuese por el detalle que a veces refleja dos y más datos.

En sí el código es éste (hay una mezcla de variables propias y de Wordpress pero no le presten atención):

Código php:
Ver original
  1. <?php
  2. foreach((get_the_category()) as $cat) {
  3.   if ($cat->category_parent == 31 AND $ent != 0) echo '
  4.  <tr>
  5.  <th scope="row">Ente ejecutor:</th>
  6.  <td>' . $cat->cat_name . ' <a href="' . get_category_link($cat->cat_ID) . '">(Obras desarrolladas por este organismo)</a><br /></td>
  7.  </tr>
  8.  ';
  9.   if ($cat->category_parent == 6 AND $reg != 0) echo '
  10.  <tr>
  11.  <th scope="row">Región:</th>
  12.  <td>' . $cat->cat_name . ' <a href="' . get_category_link($cat->cat_ID) . '">(Obras ubicadas en esta región)</a><br /></td>
  13.  </tr>
  14.  ';
  15.   if ($cat->category_parent == 34 AND $niv != 0) echo '
  16.  <tr>
  17.  <th scope="row">Nivel de avance:</th>
  18.  <td>' . $cat->cat_name . ' <a href="' . get_category_link($cat->cat_ID) . '">(Obras con este nivel de avance)</a><br /></td>
  19.  </tr>
  20.  ';
  21. } break;
  22. ?>
Puse al final ese break porque de lo contrario se viene todo el array de categorías ¿hay alguna manera de fijar con php la posición inicial de la lista y escoger el puesto del array que tenga un solo dato?. Como mencioné funciona bien, pero en unos 4 o 5 casos me devuelve varios. Si pudiera decidir desde dónde va a tomarlos resolvería el problema.
  #2 (permalink)  
Antiguo 09/02/2009, 10:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: foreach devuelve más de un dato

Mmm la cuestión es que sepas en que posicion esta el dato que quieres imprimir, lo que puedes hacer es por ejemplo, asignar el resultado de esa función a un array:
Código php:
Ver original
  1. $results = get_the_category();
  2. var_dump($results);

Así puedes ver y estudiar la estructura, y ya que sepas en que posicion vienen los datos usar array_slice para obtener solo una parte del array.

Saludos
  #3 (permalink)  
Antiguo 09/02/2009, 16:40
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: foreach devuelve más de un dato

Cuando hablas de que devuelve dos o más datos... Te refieres a que el foreach cicla más de una vez? Repite datos? En todo caso el problema estaría en el proceso dentro de la función get_the category().

por otro lado, ese break; está fuera del foreach, por lo que en teoría no debería tener efecto alguno. Todo ese código forma parte de alguna otra estructura de control más grande?

  #4 (permalink)  
Antiguo 10/02/2009, 03:29
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
Respuesta: foreach devuelve más de un dato

Mil gracias muchachos.

Naah al final resolví adaptando una función interna de Wordpress. Apliqué lo del var_dump pero luego rebuzné a todo gañote con el array_slice (menos mal que estas cosas las paso con soda) y abandoné la pelea justo cuando estaba a punto de estrellar la computadora contra la pared.

Cita:
Iniciado por okram
por otro lado, ese break; está fuera del foreach, por lo que en teoría no debería tener efecto alguno.
No sé si está dentro o fuera, pero si lo quito se viene todo el chorizo de categorías .

Cita:
Iniciado por okram
Todo ese código forma parte de alguna otra estructura de control más grande?
Así es, pero en la mayoría de los casos terminan siendo arrays de datos que se controlan con otros arrays de funciones [ ejemplo ]. Lo que yo hago es adaptar esas funciones. Algunas veces he tenido que programar desde cero con código independiente del soft para luego mezclarlo en la fiesta, pero afortunadamente son casos minoritarios. Siendo diseñador tengo que poner a punto el sistema para poder seguir maquetando. Desde luego a veces es extenuante.

Wordpress y sus tags llegan hasta un punto muy limitado por sí mismos, pero cuando éstos comienzan a ser adaptados con un poco de programación extra te aseguro que no hay barreras.

De verdad recomiendo Wordpress aún para desarrolladores profesionales, ya que su implementación ahorra un montón de trabajo (yo defino a esta aplicación como un FW más que un CMS común), sobre todo en las opciones y recursos del backend. Y a la hora de actualizar simplemente se sobrescriben los archivos y listo, porque WP también tiene un sistema en el cual no es necesario tocar un pelo de los archivos del núcleo.

Así que cuando tengan tiempo tómense la pequeña molestia de descargarlo y analizarlo. Me darán la razón, sobre todo cuando vean que tendrán la capacidad de culminar proyectos en pocas semanas, cuando en otras condiciones les tomaría meses llegar a exactamente lo mismo, por muy experto que sea el programador.
  #5 (permalink)  
Antiguo 10/02/2009, 09:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: foreach devuelve más de un dato

Mmmm y porque no mejor ocupar algún CMS Open Source?, digo se que es bueno Wordpress, pero creo que para cosas como las que propones un Framework más avanzado es más sencillo de modificar, por ejemplo Zend Framework y encima un CMS.

Saludos
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 13:05.