Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] ¿Cómo darle formato a esta cadena?

Estas en el tema de ¿Cómo darle formato a esta cadena? en el foro de PHP en Foros del Web. Hola comunidad, ayer estuve por acá con una duda que ya está resuelta gracias a dos usuarios que me supieron explicar muy bien algunas cosas, ...
  #1 (permalink)  
Antiguo 07/09/2014, 19:39
 
Fecha de Ingreso: abril-2014
Ubicación: 3 metros sobre la casa de abajo
Mensajes: 40
Antigüedad: 10 años
Puntos: 6
¿Cómo darle formato a esta cadena?

Hola comunidad, ayer estuve por acá con una duda que ya está resuelta gracias a dos usuarios que me supieron explicar muy bien algunas cosas, sin embargo, hoy tengo otra duda con algo muy parecido.

Iré al grano para no enrredarme más de lo que ya estoy

Tengo que copiar cierta información de una página y procesarla por medio de un pequeño sistema que me ando inventando, con la finalidad de darle el formato que necesito. El problema está en que al copiar y pegar la información, esta mantiene el formato de origen, con lo cual me la coloca exactamente en esta disposición:

Robert
Sam
Yanni
Morpel
Rock In A Hard Place
Baltim


¿Que necesito?

Que al pegar esa info, el sistemita la procese y me arroje como resultado la misma info pero con este formato:

[[Robert]]<br>[[Sam]]<br>[[Yanni]]<br>[[Morpel]]<br>[[Rock In A Hard Place]]<br>[[Baltim]]

Nótese que la etiqueta <br> debe aparecer literalmente y no como código. Ahora bien, si es muy dificil de hacer lo que necesito, también me podría servir el siguiente formato como resultado del procesamiento:

[[Robert]]<br>
[[Sam]]<br>
[[Yanni]]<br>
[[Morpel]]<br>
[[Rock In A Hard Place]]<br>
[[Baltim]]<br>


Creo haber estado cerca de lograr dar con el primer formato que necesito, ya que hice lo siguiente:

Código PHP:
<?php
$array_compra 
preg_replace('/(.+)/''[[$1]]&ltbr>'explode(' '$npccompra));
echo 
"<b>|Npc al que se le compra: = </b>".implode(''$array_compra)."<br>"
?>
Eso me dió como resultado lo siguiente:

[[Azil]]<br>[[Shanar]]<br>[[Memech]]<br>[[Cornelia]]<br>[[Willard]]<br>[[Ulrik]]<br>[[Raffael]]<br>[[Kroox]]<br>[[Cedrik]]<br>[[Turvy]]<br>[[Hardek]]<br>[[Brengus]]<br>[[Robert]]<br>[[Sam]]<br>[[Yanni]]<br>[[Morpel]]<br>[[Rock]]<br>[[In]]<br>[[A]]<br>[[Hard]]<br>[[Place]]<br>[[Baltim]]<br>

El problema es que lo que está en negrita, está malo, ya que divide el texto original:

Texto original: Rock In A Hard Place
Lo que espero obtener:[[Rock In A Hard Place]]<br>
Lo que realmente hace: [[Rock]]<br>[[In]]<br>[[A]]<br>[[Hard]]<br>[[Place]]

Cabe destacar que nunca había usado preg_replace, ni explode ni implode, de hecho, anoche fue que me enteré de que existía (me mantengo a mucha distancia del PhP).

Si alguien me puede dar una ayuda me libraría de un gran dolor de cabeza

Muchas gracias de antemano :) Saludos y un fuerte abrazo desde Venezuela.
__________________
Vivir y aprender... ojalá pudiera resistir por lo menos 150 años.
  #2 (permalink)  
Antiguo 07/09/2014, 22:28
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: ¿Cómo darle formato a esta cadena?

El problema está en que separas a la cadena desde los espacios que contenga y como en 'Rock In A Hard Place' hay espacios, pues terminarás separando a cada palabra. Lo ideal sería que hayan delimitadores, como en tu anterior publicación, de esa manera, funcionaría como quieres.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 08/09/2014, 08:49
 
Fecha de Ingreso: abril-2014
Ubicación: 3 metros sobre la casa de abajo
Mensajes: 40
Antigüedad: 10 años
Puntos: 6
Respuesta: ¿Cómo darle formato a esta cadena?

Buen día Alexis88, efectivamente, estaba dividiendo la cadena a través de los espacios y se terminaba separando cada palabra. Intenté hacerlo de otra forma, ya que al principio contaba con un <input type="text"> y este aparentemente colocaba la cadena de manera horizontal (lo cual me dificultaba la cuestión debido a mi pobre conocimiento en PhP). Para solucionarlo lo que hice fué crear un <textarea> que me resultó hasta más cómodo, ya que en el puedo pegar la información tal cual la copio de la fuente original.

Ahora bien, tengo un pequeño problemita al que le he estado buscando la vuelta desde hace varias horas y no logro dar con la solución:

Código PHP:
Ver original
  1. $npccompra = $_POST['npccompra'];
  2. $array_compra = preg_replace('/(.+)\s\s+/', '[[$1]]&ltbr>', explode(', ', $npccompra));
  3. implode('', $array_compra);

El resultado que me arroja es "casi" perfecto:

Cita:
[[Azil]]<br>[[Shanar]]<br>[[Memech]]<br>[[Cornelia]]<br>[[Willard]]<br>[[Ulrik]]<br>[[Raffael]]<br>[[Kroox]]<br>[[Cedrik]]<br>[[Turvy]]<br>[[Hardek]]<br>[[Brengus]]<br>[[Robert]]<br>[[Sam]]<br>[[Yanni]]<br>[[Morpel]]<br>[[Rock In A Hard Place]]<br>Baltim
Salvo por el último elemento (Baltim) el cual no me aparece envuelto con los [[ ]].

Disculpa mi abuso, pero ¿tienes alguna idea de cómo puedo solucionarlo? Al principio mientras testeaba con algunos delimitadores logré hacer que toda la cadena tuviera el formato, pero entre pruebas y pruebas terminé olvidando cómo lo hice.

De antemano muchas gracias, tu ayuda me ha resultado enormemente útil.
__________________
Vivir y aprender... ojalá pudiera resistir por lo menos 150 años.
  #4 (permalink)  
Antiguo 08/09/2014, 10:01
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: ¿Cómo darle formato a esta cadena?

En la expresión regular /(.+)\s\s+/, la última parte \s\s+ es innecesaria. El punto representa a cualquier caracter, incluidos espacios.

Lo he probado así:
Código PHP:
Ver original
  1. $npccompra = 'Robert, Sam, Yanni, Morpel, Rock In A Hard Place, Baltim';
  2. $array_compra = preg_replace('/(.+)/', '[[$1]]', explode(', ', $npccompra));
  3. echo implode('<br />', $array_compra) . '<br />';

Y he obtenido lo siguiente:
Código HTML:
Ver original
  1. [[Robert]]<br />[[Sam]]<br />[[Yanni]]<br />[[Morpel]]<br />[[Rock In A Hard Place]]<br />[[Baltim]]<br />

Que creo que es lo que buscas. Solo era cuestión de descomponer a la cadena a partir de las comas y espacio y luego insertar los saltos de línea entre cada fragmento.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 08/09/2014, 11:00
 
Fecha de Ingreso: abril-2014
Ubicación: 3 metros sobre la casa de abajo
Mensajes: 40
Antigüedad: 10 años
Puntos: 6
Respuesta: ¿Cómo darle formato a esta cadena?

¡Corre perfecto!, era justo lo que buscaba. Muchas gracias de nuevo @Alexis88.

Salduos! :))
__________________
Vivir y aprender... ojalá pudiera resistir por lo menos 150 años.

Etiquetas: darle, formato, usuarios
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 03:58.