2009-03-27 37 views
5

Tôi thấy mình cần chức năng này và tự hỏi liệu nó có tồn tại trong PHP không.Chức năng này có tồn tại trong PHP không?

/** 
* Truncates $str and returns it with $ending on the end, if $str is longer 
* than $limit characters 
* 
* @param string $str 
* @param int $length 
* @param string $ending 
* @return string 
*/ 
function truncate_string($str, $length, $ending = "...") 
{ 
    if (strlen($str) <= $length) 
    { 
     return $str; 
    } 
    return substr($str, 0, $length - strlen($ending)).$ending; 
} 

Vì vậy, nếu giới hạn là 40 và chuỗi là "Con cáo nhanh nhảy qua con chó nâu lười", đầu ra sẽ là "Con cáo nhanh nhảy qua lông mày lười ...". Nó có vẻ như là một thứ có thể tồn tại trong PHP, vì vậy tôi đã rất ngạc nhiên khi tôi không thể tìm thấy nó.

Trả lời

2

Không có nó không tồn tại. Nhiều thư viện cung cấp nó tuy nhiên vì bạn không phải là người đầu tiên cần nó. ví dụ. Smarty

1

Không.

5
$suffix = '...'; 
$maxLength = 40; 

if(strlen($str) > $maxLength){ 
    $str = substr_replace($str, $suffix, $maxLength); 
} 

Triển khai của bạn có thể thay đổi đôi chút tùy thuộc vào độ dài của hậu tố có được tính vào tổng độ dài chuỗi hay không.

+0

Đó là không tốt bởi vì nó gắn thêm các hậu tố vào một chuỗi ngắn hơn $ maxLength. –

+0

Đúng, bạn vẫn phải quấn nó trong chức năng của riêng bạn, mà chỉ chạy substr_replace() dựa trên điều kiện đó. –

4

Dưới đây là phiên bản một dòng cho những người quan tâm

<?php 
    echo (strlen($string) > 40 ? substr($string, 0, 37)."..." : $string); 
?> 
+0

Đó cũng là câu trả lời đầu tiên của tôi. Trừ chiều dài của hậu tố của bạn từ độ dài chuỗi của bạn, nếu không bạn sẽ có kết quả 43 ký tự –

+0

Làm việc tốt nhưng tốt hơn nên sử dụng mã dễ đọc hơn mã ternary, trừ khi đó là tình huống cực tốc lặp lại điều này một triệu lần. – TravisO

+0

Tất nhiên, tôi đồng ý. Do đó từ ngữ của tôi cho những người quan tâm. –

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