Tôi đã đưa ra chức năng này cắt ngắn một chuỗi nhất định hoặc số lượng từ đã cho hoặc số ký tự nhất định ngắn hơn. Sau đó, sau khi tắt tất cả mọi thứ sau khi số lượng ký tự hoặc giới hạn từ, nó gắn thêm một '...' vào chuỗi.cắt ngắn chuỗi, nhưng loại bỏ giữa chuỗi thay vì kết thúc
Làm cách nào để xóa ký tự/từ ở giữa chuỗi và thay thế chúng bằng '...' thay vì thay thế các ký tự/từ ở cuối bằng '...'?
Đây là mã của tôi:
function truncate($input, $maxWords, $maxChars){
$words = preg_split('/\s+/', $input);
$words = array_slice($words, 0, $maxWords);
$words = array_reverse($words);
$chars = 0;
$truncated = array();
while(count($words) > 0)
{
$fragment = trim(array_pop($words));
$chars += strlen($fragment);
if($chars > $maxChars){
if(!$truncated){
$truncated[]=substr($fragment, 0, $maxChars - $chars);
}
break;
}
$truncated[] = $fragment;
}
$result = implode($truncated, ' ');
return $result . ($input == $result ? '' : '...');
}
Ví dụ nếu truncate('the quick brown fox jumps over the lazy dog', 8, 16);
được gọi, 16 ký tự ngắn hơn do đó là cắt ngắn đó sẽ xảy ra. Vì vậy, 'con cáo nhảy qua con chó lười' sẽ bị xóa và '...' sẽ được thêm vào.
Nhưng, thay vào đó, làm thế nào tôi có thể có một nửa giới hạn ký tự đến từ đầu chuỗi và một nửa đến từ cuối chuỗi và những gì được xóa ở giữa thay thế bằng '...'? Vì vậy, chuỗi tôi đang tìm kiếm để trở lại trong này, một, trường hợp sẽ là: 'quic ... con chó lười biếng'.
+1 đơn giản và đẹp. – Orangepill
Cần một 'if ($ textLength> $ maxChars)' – Petah
Lưu ý rằng kết quả này trong một chuỗi có 19 ký tự mặc dù $ maxChars được đặt thành 16. – adean