2012-04-21 56 views
6

Tôi muốn biết liệu có thể tách văn bản thành hai phần hay không.Tách văn bản thành hai cột với PHP

Trên trang web của tôi, tôi có một mô tả sản phẩm (500-1000 từ) và tôi muốn hiển thị nó như vậy:

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


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

Trả lời

8

Something như thế này?

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

Đã thử ứng dụng này và ứng dụng hoạt động lạ. Có văn bản trong cột đầu tiên và chỉ một từ, từ cuối cùng từ văn bản, trong cột thứ hai. – Psyche

+1

Có lỗi đánh máy; 'strrpos' thay vì' strpos'. –

+0

Trên thực tế, lỗi chính tả là tôi đã quên '-' trong tham số chiều dài của [' strrpos'] (http://php.net/strrpos) –

0

Đó là dễ dàng như:

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

Nhưng trong thực tế bạn có thể muốn làm điều đó client-side, vì có thể có các yếu tố khác có liên quan, chiều rộng đoạn nhẹ, dấu gạch nối, chiều cao khối văn bản, v.v.

Trong CSS3 bạn đã có hỗ trợ cho multiple columns of text.

+0

Điều này sẽ phá vỡ html. Giải pháp nào có thể được tìm thấy cho điều này? – jcarlosweb

7

Điều này trong IMHO một vấn đề điển hình cần được thực hiện thông qua CSS, bởi vì nó chỉ ảnh hưởng đến cách nó được hiển thị. Tại sao bạn không sử dụng CSS3 của 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; 
} 

(Sao chép từ http://www.quirksmode.org/css/multicolumn.html)

+1

Tính năng này chưa được triển khai trong các trình duyệt hiện đại. http://caniuse.com/#search=column – matmancini

+2

Đây là câu trả lời hay nhất, vì hầu hết các trình duyệt đều hỗ trợ tính năng này. (hầu hết trong số họ có tiền tố, nhưng nó hoạt động) – rafamds

1

Bạn có thể dễ dàng chia một văn bản trong hai phần trong 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); 

Nhưng mots này thường cắt cụm từ ở giữa một từ. Vì vậy, bạn sẽ cần phải cập nhật mã để tìm khoảng trống gần nhất ở giữa:

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

Không gian này không phải là nơi duy nhất để cắt văn bản đẹp. Vì vậy, bạn sẽ phải tìm kiếm kết thúc của dòng. Và một số không gian cũng không tốt. Ví dụ: khoảng trống trước dấu chấm phẩy. Vì vậy, bạn sẽ thêm vào để cải thiện mã này để cải thiện kết quả.

Bạn cũng có thể thử chỉ thị nhiều cột css3: http://www.css3.info/preview/multi-column-layout/ nhưng lưu ý được hỗ trợ bởi IE.

+0

, Điều này phá vỡ html. Giải pháp nào có thể được tìm thấy cho điều này? – jcarlosweb

+0

Khổ văn bản bằng html trên đó có thể phức tạp hơn tùy thuộc vào loại HTML trên đó. Có một số câu trả lời hay ở đây: http://stackoverflow.com/questions/16583676/shorten-text-without-splitting-words-or-breaking-html-tags – Matthieu

+0

cảm ơn rất nhiều. Sự thật đang trở nên rất phức tạp. – jcarlosweb

Các vấn đề liên quan