tôi sẽ khuyên bạn không nên sử dụng số lượng từ như một đường cơ sở. Bạn có thể dễ dàng kết thúc với số lượng nhiều hơn ít hơn hoặc nhiều hơn nhiều dữ liệu hơn dự định hiển thị.
Một cách tiếp cận mà tôi đã sử dụng trong quá khứ là yêu cầu độ dài mong muốn, nhưng đảm bảo rằng nó không cắt xén một từ. Dưới đây là một cái gì đó mà có thể làm việc cho bạn:
function function_that_shortens_text_but_doesnt_cutoff_words($text, $length)
{
if(strlen($text) > $length) {
$text = substr($text, 0, strpos($text, ' ', $length));
}
return $text;
}
Điều đó nói rằng, nếu bạn vượt qua 1
như tham số thứ hai để str_word_count
, nó sẽ trả về một mảng chứa tất cả các từ, và bạn có thể sử dụng thao tác mảng về điều đó. Ngoài ra, bạn có thể mặc dù, nó hơi hackey, phát nổ chuỗi trên không gian, v.v ... Nhưng điều đó giới thiệu rất nhiều chỗ cho lỗi, chẳng hạn như những thứ không phải là từ được tính là từ.
PS. Nếu bạn cần phiên bản an toàn Unicode của chức năng trên và có cài đặt các tiện ích mở rộng mbstring
hoặc iconv
, chỉ cần thay thế tất cả các hàm chuỗi bằng mb_
hoặc iconv_
tương đương tiền tố tương đương.
Tất cả các câu trả lời đều có chất lượng, nhưng bạn đã giải thích lý do tại sao tôi nên đi theo ký tự thay vì từ. Cảm ơn! – JasonBartholme
Nhân tiện, bạn không giải quyết tình huống không có khoảng trống trong ký tự '$ length' đầu tiên và bạn vẫn có thể kết thúc với * nhiều * ít dữ liệu hơn dự định hiển thị nếu không gian duy nhất nằm trong nhân vật thứ tư hay như vậy (xem câu trả lời của tôi cho giải pháp). – Zarel
Thành thật mà nói, đối với những gì tôi đã sử dụng phương pháp này, đó sẽ không bao giờ là một vấn đề. Điểm tốt, mặc dù. – jason