2012-04-21 8 views
6

Vorrei sapere se è possibile dividere un testo in due parti.Dividere un testo in due colonne con PHP

Sul mio sito ho una descrizione del prodotto (500-1000 parole) e vorrei per visualizzarla in questo modo:

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


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

risposta

8

qualcosa di simile?

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

Ho provato questo e si comporta in modo strano. C'è del testo nella prima colonna e solo una parola, l'ultima parola del testo, nella seconda colonna. – Psyche

+1

C'è l'errore di battitura; 'strrpos' invece di' strpos'. –

+0

In realtà l'errore è che ho dimenticato il '-' nel parametro length di [' strrpos'] (http://php.net/strrpos) –

0

E 'facile come:

$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); 

Ma in realtà si potrebbe desiderare di farlo sul lato client, in quanto ci potrebbero essere altri fattori coinvolti, larghezza punto luce, la sillabazione, altezza del blocco di testo, ecc.

In CSS3 hai già il supporto per multiple columns of text.

+0

Interrompe l'html. Quale soluzione può essere trovata a questo? – jcarlosweb

7

Questo in IMHO è un problema tipico che dovrebbe essere eseguito tramite CSS, perché influisce solo sul modo in cui viene visualizzato. Perché non si utilizzano di 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; 
} 

(copiato da http://www.quirksmode.org/css/multicolumn.html)

+1

Questa funzione non è ancora stata implementata nei browser moderni. http://caniuse.com/#search=column – matmancini

+2

Questa è la migliore risposta, poiché la maggior parte dei browser supporta questa funzionalità. (la maggior parte di loro con prefissi, ma funziona) – rafamds

1

si può facilmente dividere un testo in due parti in 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); 

ma questo mots spesso taglia la frase nel mezzo di una parola. Quindi, è necessario aggiornare il codice per trovare lo spazio più vicino al centro:

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

Lo spazio non è l'unico posto per un bel taglio di testo. Quindi, dovrai cercare i confini della linea. E alcuni spazi non sono neanche buoni. Ad esempio lo spazio juste prima di un punto e virgola. Quindi aggiungerai per migliorare questo codice per risultati migliori.

Si può anche provare la direttiva multi-colonna css3: http://www.css3.info/preview/multi-column-layout/ ma è supportata da IE.

+0

, Questo rompe l'html. Quale soluzione può essere trovata a questo? – jcarlosweb

+0

Sputare un testo con html su di esso può essere molto più complicato a seconda del tipo di HTML in esso contenuto. Ci sono alcune buone risposte qui: http://stackoverflow.com/questions/16583676/shorten-text-without-splitting-words-or-breaking-html-tags – Matthieu

+0

grazie mille. La verità sta diventando molto complicata. – jcarlosweb

Problemi correlati