Foros del Web » Programando para Internet » PHP »

Quitar una coma al final de un loop

Estas en el tema de Quitar una coma al final de un loop en el foro de PHP en Foros del Web. Tengo una serie de datos que me traigo mediante un foreach. Cada dato termina con una coma, pero quisiera eliminársela al último elemento ¿cómo se ...
  #1 (permalink)  
Antiguo 04/03/2009, 06:45
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
Quitar una coma al final de un loop

Tengo una serie de datos que me traigo mediante un foreach. Cada dato termina con una coma, pero quisiera eliminársela al último elemento ¿cómo se le hace?.

Así sale actualmente:
Código PHP:
Dato 1,
Dato 2,
Dato 3
Y así desearía que quedara:
Código PHP:
Dato 1,
Dato 2,
Dato 3 
  #2 (permalink)  
Antiguo 04/03/2009, 08:17
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Quitar una coma al final de un loop

Depende, ¿necesitas sacar la coma antes de finalizar el bucle? Ya que después de finalizar aun dispondrás del último valor y podrás modificarlo si lo deseas .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 04/03/2009, 08:37
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: Quitar una coma al final de un loop

Hola David, necesito sacarle la coma al último elemento del bucle, antes de que finalice.
  #4 (permalink)  
Antiguo 04/03/2009, 08:48
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Quitar una coma al final de un loop

Quizás en lugar de un bucle foreach, puedes usar un bucle normal (for o while) usando each. Por ejemplo:
Código php:
Ver original
  1. for ($i=0; list($key, $value) = each($array); $i++) {
  2.     if ($i == count($array)-1) {
  3.         $value = substr($value, 0, strlen($value)-1);
  4.     }
  5.     /* Resto del código */
  6. }
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 04/03/2009, 08:58
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: Quitar una coma al final de un loop

Gracias. Es el detalle hermano. No puedo salir del foreach. Es decir, sí puedo, pero ameritaría un chorro de código extra no previsto.

Aunque déjame ver, creo que me diste una idea con esa variable.
  #6 (permalink)  
Antiguo 04/03/2009, 09:02
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Quitar una coma al final de un loop

No hay problema, también puedes hacer lo mismo con un foreach colocando una variable como contador (que se incremente a cada iteración) que sirva para determinar si has llegado al último elemento del array.

EDITO: P.S.: ¿Por qué habrías que agregas más código siendo un for normal si el comportamiento es el mismo? , a cada iteración tendrás en $key la clave, y en $value el valor . Pero bueno, por algo ha de ser .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 04/03/2009, 09:59
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 7 meses
Puntos: 18
Respuesta: Quitar una coma al final de un loop

o puedes decidir no volverte loco y hacer
Código PHP:
$cadena substr ($cadena0strlen($cadena) - 1); 
  #8 (permalink)  
Antiguo 04/03/2009, 10:08
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Quitar una coma al final de un loop

Hola, trasgukabi. Según lo que entendí él no quiere quitar la coma final a todos los elementos, sólo al último del ciclo .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 04/03/2009, 10:10
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 7 meses
Puntos: 18
Respuesta: Quitar una coma al final de un loop

precisamente. que lo haga después del loop, y voilá!!

EDITO: Ay coño, ahora he caido. Eso me pasa por no leer todo. También podría hacer, en vez de ir sacando líneas, guardarlo en una variable y aplicarle el replace después del loop.
EDITO 2: Y además ya se lo habías puesto tú, David.
  #10 (permalink)  
Antiguo 04/03/2009, 15:03
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: Quitar una coma al final de un loop

Jejeje adoro este lenguaje. De tanto darle lo logré y casi me da dolor lo sencillo que era. .

Éste era el código original:

Código PHP:
foreach( $el_loop as $mi_loop ) {
  
/* Código */

Sólo necesitaba dos referencias de conteo para comparar. Una venía con count($mi_loop) que me daba el total, pero no sabía cómo listar el array. Probé con reset, array_values, array_pop, array_pepe, etc. y al final miren:

Código PHP:
$cuenta count($el_loop);
foreach( 
$el_loop as $numero=>$mi_loop ) {
  if(
$numero == $cuenta-1$mi_loop str_replace'),' ')' $mi_loop);
  
/* Código */

Gracias por la ayuda


PD: Definitivamente Dios creó a php.net.
  #11 (permalink)  
Antiguo 04/03/2009, 15:37
Avatar de foreverOdd  
Fecha de Ingreso: noviembre-2007
Ubicación: Caracas
Mensajes: 489
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: Quitar una coma al final de un loop

Una manera mas elegante de hacerlo puede ser:

Código php:
Ver original
  1. foreach( $el_loop as $numero=>$mi_loop ) {
  2. $con_o_sin_coma = (end($el_loop)==$mi_loop) ? ")" : "),";
  3.   /* Código */
  4. }

Saludos
__________________
My path is lit by my own fire, I only go where I desire
  #12 (permalink)  
Antiguo 04/03/2009, 15:42
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: Quitar una coma al final de un loop

Pregunta curiosa: y esa variable '$con_o_sin_coma' queda guindando sin ser usada?
  #13 (permalink)  
Antiguo 04/03/2009, 15:53
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Quitar una coma al final de un loop

Cita:
Hola David, necesito sacarle la coma al último elemento del bucle, antes de que finalice.
Porque antes de que finalice?, ya te lo dijo David y tambien trasgukabi, es mas facil y optimo crear la cadena normalmente dentro del bucle y quitar la coma al salir:

Código php:
Ver original
  1. $cadena = substr($cadena, 0, -1);

O hay algo adicional que debas hacer especificamente con el ultimo elemento de la matriz?

Tambien podrias hacerlo antes de iniciar el bucle:

Código php:
Ver original
  1. $mi_loop[count($mi_loop)-1] = str_replace(',', '', end($mi_loop));
__________________
- León, Guanajuato
- GV-Foto

Última edición por Triby; 04/03/2009 a las 16:41
  #14 (permalink)  
Antiguo 04/03/2009, 16:02
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Quitar una coma al final de un loop

Hola:

Pues yo directamente uso un implode del array con la coma como separador...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #15 (permalink)  
Antiguo 04/03/2009, 16:15
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: Quitar una coma al final de un loop

Cita:
Iniciado por caricatos Ver Mensaje
Hola:

Pues yo directamente uso un implode del array con la coma como separador...

Saludos
Idem, es más limpio y se ejecuta más rápido que el substr
  #16 (permalink)  
Antiguo 04/03/2009, 16:25
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Quitar una coma al final de un loop

Caricatos y GatorV, al menos como lo menciona Metacortex los datos ya tienen esa coma al final. Tal vez se podria usar implode con espacio como separador, pero depende de las necesidades de Metacortex.
__________________
- León, Guanajuato
- GV-Foto
  #17 (permalink)  
Antiguo 04/03/2009, 16:32
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Quitar una coma al final de un loop

Cita:
Iniciado por Triby Ver Mensaje
Caricatos y GatorV, al menos como lo menciona Metacortex los datos ya tienen esa coma al final. Tal vez se podria usar implode con espacio como separador, pero depende de las necesidades de Metacortex.
¡Je, je!

Solo se le puede ocurrir al "Meta" poner una absurda coma detrás de los items de un array...

__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #18 (permalink)  
Antiguo 04/03/2009, 16:45
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: Quitar una coma al final de un loop

Cita:
Iniciado por Triby
Porque antes de que finalice?, ya te lo dijo David y tambien trasgukabi, es mas facil y optimo crear la cadena normalmente dentro del bucle y quitar la coma al salir:
Lo sé, y antes de que postearas estuve probando eso mismo y otras cosas durante casi todo el día sin éxito. Aún no he probado la propuesta de Caricatos y Gator. Por ahora lo que me está funcionando es lo que publiqué más arriba.

Obviamente el problema no es el código (de hecho casi todos funcionan muy bien en páginas de prueba) sino que estoy trabajando con una aplicación (Wordpress) cuyo llamado de datos se hacen de manera muy específica porque las funciones ya están hechas de una forma.

Por ejemplo, cuando intento convertir ciertos datos a variables el sistema se vuelve loco por alguna extraña razón (aún no llego a esa lección) y me devuelve resultados equivocados. Eso no sucede si yo mismo hago los queries y construyo mis propias funciones, todo perfecto, pero por otro lado ya están hechas y -antes que desperdiciar el recurso- prefiero adaptarme un poquito a lo que éstas necesitan para arrancar.

La aplicación es tremenda. A veces es un lío, pero sólo a veces =P
  #19 (permalink)  
Antiguo 04/03/2009, 16:50
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Quitar una coma al final de un loop

Reemplazar el ultimo elemento antes de iniciar el bucle tampoco te funciono?

Código php:
Ver original
  1. $mi_loop[count($mi_loop)-1] = str_replace(',', '', end($mi_loop));
__________________
- León, Guanajuato
- GV-Foto
  #20 (permalink)  
Antiguo 04/03/2009, 16:52
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: Quitar una coma al final de un loop

Cita:
Iniciado por caricatos Ver Mensaje
¡Je, je!

Solo se le puede ocurrir al "Meta" poner una absurda coma detrás de los items de un array...

Hey, la coma es parte del resultado html.

Cita:
Iniciado por Triby
Reemplazar el ultimo elemento antes de iniciar el bucle tampoco te funciono?
Lo puse antes y luego después del foreach y nada. Me daba error de "can't convert STD class... etc."
  #21 (permalink)  
Antiguo 04/03/2009, 17:03
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: Quitar una coma al final de un loop

Mmm pero el resultado que viene de tu loop ya trae la coma?

Porque se resuelve fácilmente usando:
Código php:
Ver original
  1. $items = array();
  2. foreach( get_items() as $item ) {
  3.        $items[] = $item;
  4. }
  5.  
  6. echo implode(',<br />', $items );

Saludos
  #22 (permalink)  
Antiguo 04/03/2009, 17:06
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Quitar una coma al final de un loop

Muestra lo que haces con cada elemento dentro del bucle, porque creo que estamos tratando de adivinar y se complica mucho.
__________________
- León, Guanajuato
- GV-Foto
  #23 (permalink)  
Antiguo 04/03/2009, 17:17
Avatar de xbx
xbx
 
Fecha de Ingreso: mayo-2008
Ubicación: /home/xbx
Mensajes: 301
Antigüedad: 15 años, 11 meses
Puntos: 11
Respuesta: Quitar una coma al final de un loop

Hola,

Así tampoco?:
Código PHP:
$cuenta count($el_loop);

$el_loop[$cuenta-1] = str_replace('),' ')' ,  $el_loop[$cuenta-1]);

foreach( 
$el_loop as $mi_loop ) { 
   
/* Código */ 

Saludos,
  #24 (permalink)  
Antiguo 04/03/2009, 17:23
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
Respuesta: Quitar una coma al final de un loop

Si, cuenta que es lo que deseas hacer y como lo estas haciendo. No se si la hayas visto, pero tl vez tambien la funcion query_posts de WP te sirva.
__________________
Sin Ideas
  #25 (permalink)  
Antiguo 04/03/2009, 17:33
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: Quitar una coma al final de un loop

Cita:
Iniciado por GatorV
Mmm pero el resultado que viene de tu loop ya trae la coma?
Sí, el html trae la coma de forma estática (que también puede eliminársele y ponerla con php). El asunto es que sólo el último elemento del bucle no debe llevarla.

No sabía de las bondades del foreach. De hecho también necesitaba la variable $numero para asignarla a otra función que tenía descartada por los momentos. Maté 2 pájaros de un tiro Muajajaja!

Ya era hora de que le ganara una a este php.

Cita:
Iniciado por Triby
Muestra lo que haces con cada elemento dentro del bucle, porque creo que estamos tratando de adivinar y se complica mucho.
Está solucionado hombre . Te lo dije como 5 posts arriba, y hace unos 10 posts había publicado cómo lo hice.

De todas formas te dejo el enlace al resultado: venezueladeverdad.gob.ve/prueba_bucle.php
  #26 (permalink)  
Antiguo 04/03/2009, 17:50
Avatar de xbx
xbx
 
Fecha de Ingreso: mayo-2008
Ubicación: /home/xbx
Mensajes: 301
Antigüedad: 15 años, 11 meses
Puntos: 11
Respuesta: Quitar una coma al final de un loop

Hola metacortex

Cita:
Iniciado por metacortex Ver Mensaje
Sí, el html trae la coma de forma estática (que también puede eliminársele y ponerla con php). El asunto es que sólo el último elemento del bucle no debe llevarla. (...)
Entonces lo mejor sería eliminarsela y que php la coloque mediante un implode (así como dijeron GatorV y caricatos). Es lo más limpio.

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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 08:07.