2012-04-21 20 views
6

Chciałbym wiedzieć, czy istnieje możliwość podzielenia tekstu na dwie części.Podziel tekst na dwie kolumny z PHP

Na mojej stronie mam opis produktu (500-1000 słów) i chciałbym, aby wyświetlić ją tak:

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


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

Odpowiedz

8

coś takiego?

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

Wypróbowałem to i zachowuje się dziwnie. W pierwszej kolumnie znajduje się tekst, aw drugiej kolumnie tylko jedno słowo, ostatnie słowo z tekstu. – Psyche

+1

Jest literówka; 'strrpos' zamiast' strpos'. –

+0

Właściwie literówka jest taka, że ​​zapomniałem '-' w parametrze długości [' strrpos'] (http://php.net/strrpos) –

0

To tak proste, jak:

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

Ale w rzeczywistości może chcesz zrobić to po stronie klienta, ponieważ mogą istnieć inne czynniki, światło ustęp szerokość, dzielenie wyrazów, wysokość bloku tekstu, itd.

W CSS3 masz już wsparcie dla multiple columns of text.

+0

To łamie html. Jakie rozwiązanie można znaleźć? – jcarlosweb

7

To w IMHO typowy problem, który powinien zostać wykonany za pomocą CSS, ponieważ wpływa tylko na sposób wyświetlania. Dlaczego nie używacie CSS3 na 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; 
} 

(Skopiowane z http://www.quirksmode.org/css/multicolumn.html)

+1

Ta funkcja nie została jeszcze zaimplementowana w nowoczesnych przeglądarkach. http://caniuse.com/#search=column – matmancini

+2

To jest najlepsza odpowiedź, ponieważ większość przeglądarek obsługuje tę funkcję. (większość z nich ma prefiksy, ale działa) – rafamds

1

można łatwo podzielić tekst na dwie części w 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); 

Ale to mots często wyciąć fraza w środku słowa. Więc musisz zaktualizować kod, aby znaleźć najbliższy przestrzeń pośrodku:

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

Przestrzeń nie jest jedynym miejscem na miły tekst cięcia. Musisz więc szukać końców linii. A niektóre przestrzenie też nie są dobre. Na przykład przestrzeń tuż przed średnikiem. Dodamy więc ulepszenie tego kodu w celu poprawy wyników.

Można również wypróbować dyrektywę wielo-kolumnową css3: http://www.css3.info/preview/multi-column-layout/ , ale jest to notatka obsługiwana przez IE.

+0

, To łamie html. Jakie rozwiązanie można znaleźć? – jcarlosweb

+0

Spiting tekstu z html na nim może być bardziej skomplikowany w zależności od typu na HTML w nim. Jest kilka dobrych odpowiedzi: http://stackoverflow.com/questions/16583676/shorten-text-without-splitting-words-or-breaking-html-tags – Matthieu

+0

wielkie dzięki. Prawda staje się bardzo skomplikowana. – jcarlosweb