2012-04-21 100 views
6

Me gustaría saber si es posible dividir un texto en dos partes.Dividir un texto en dos columnas con PHP

En mi sitio web que tienen una descripción del producto (500-1000 palabras) y me gustaría mostrarlo así:

<div class="text-col"> 
    <?php echo nl2br($col1); ?> 
</div> 


<div class="text-col"> 
    <?php echo nl2br($col2); ?> 
</div> 

Respuesta

8

Algo como esto?

$len = strlen($input); 
$space = strrpos($input," ",-$len/2); 
$col1 = substr($input,0,$space); 
$col2 = substr($input,$space); 
// now output it 
+0

Intenté este y se comporta un poco raro. Hay texto en la primera columna y solo una palabra, la última palabra del texto, en la segunda columna. – Psyche

+1

Existe el error tipográfico; 'strrpos' en lugar de' strpos' –

+0

En realidad, el error tipográfico es que olvidé el '-' en el parámetro de longitud de [' strrpos'] (http://php.net/strrpos) –

0

Es tan fácil como:

$text = "This should be a very long product description with some bold specs in it."; 
$splitat = strpos($text," ",strlen($text)/2); 
$col1 = substr($text, 0, $splitat); 
$col2 = substr($text, $splitat); 

Pero, en realidad, es posible que desee hacerlo del lado del cliente, ya que puede haber otros factores involucrados, ancho párrafo luz, la separación de sílabas, altura del bloque de texto, etc.

En CSS3 ya tiene soporte para multiple columns of text.

+0

Esto rompe el html. ¿Qué solución se puede encontrar a esto? – jcarlosweb

7

Esto en mi humilde opinión un problema típico que debe hacerse a través de CSS, ya que solo afecta a la forma en que se muestra. ¿Por qué no se utiliza de CSS3 column-count:

div#multicolumn1 { 
    -moz-column-count: 3; 
    -moz-column-gap: 20px; 
    -webkit-column-count: 3; 
    -webkit-column-gap: 20px; 
    column-count: 3; 
    column-gap: 20px; 
} 

(Copiado del http://www.quirksmode.org/css/multicolumn.html)

+1

Esta función aún no está implementada en los navegadores modernos. http://caniuse.com/#search=column – matmancini

+2

Esta es la mejor respuesta, ya que la mayoría de los navegadores son compatibles con esta función. (la mayoría de ellos con prefijos, pero funciona) – rafamds

1

Usted puede fácilmente dividir un texto en dos partes en PHP:

$text = "my very long text with a lot of words"; 
$length = strlen($text); 
$middle = round($length/2, 0); 
$col1 = substr($text, 0, $middle); 
$col2 = substr($text, $middle); 

Pero esta mots menudo corta la frase en el medio de una palabra. Por lo que tendrá que actualizar el código para encontrar el espacio más cercano de la media:

for ($i = $middle; $i < $length; $i ++) { 
    if (substr($text, $i, 1) == " ") return; 
} 
$cut = $i; 
$col1 = substr($text, 0, $cut); 
$col2 = substr($text, $cut+1); 

El espacio no es el único lugar para un buen corte de texto. Entonces, tendrá que buscar los extremos de la línea. Y algunos espacios tampoco son buenos. Por ejemplo, el espacio juste antes de un punto y coma. Por lo tanto, agregará para mejorar este código y obtener mejores resultados.

También puede probar la directiva de múltiples columnas css3: http://www.css3.info/preview/multi-column-layout/ pero es compatible con IE.

+0

, Esto rompe el html. ¿Qué solución se puede encontrar a esto? – jcarlosweb

+0

Repetir un texto con html puede ser mucho más complicado según el tipo de HTML que contenga. Hay algunas buenas respuestas aquí: http://stackoverflow.com/questions/16583676/shorten-text-without-splitting-words-or-breaking-html-tags – Matthieu

+0

muchas gracias. La verdad se está volviendo muy complicada. – jcarlosweb

Cuestiones relacionadas