Belli bir karakter limitine ulaşıldığında en yakın kelime metin bloğunu Budama?

5 Cevap php

Nasıl sizin karakter belirli bir miktar geçmişe sahip yakın kelimenin metin bloğunu Döşeme olacaktır: İşte soru. Ben sayı kelime veya harfleri belli bir sınırı, ama harfleri sınırlamak ve yakın kelime olarak onu kesmeye çalışıyor değilim.

Ben iki dizeleri vardı ki:

"This is a block of text, blah blah blah"
"this is another block of txt 2 work with"

Ben ilk satır "fin" de sona ereceğini, 27 karaktere sınırlamak istedim ve karakter sınırları bu kelimelerin içinde ulaşmış olsa bile on ikinci "txt" de sona söylüyorlar.

Bu sorunun herhangi temiz bir çözüm var mı?

5 Cevap

wordwrap fonksiyonuna bakın.

Herhalde böyle bir şey yapardı:

function wrap($string) {
  $wstring = explode("\n", wordwrap($string, 27, "\n") );
  return $wstring[0];
}

(- Veya desen - dizeleri zaten severeal hatları üzerinden yayılıyorsa, diğer char "\ n" dışındaki bölünmüş)

Ben sadece bunu yapar ve çok temiz bir max-string-length fonksiyonunu yazdı.

, Dizenin karakter eksi yer tutucu saymak, substr ile doğru uzunlukta trimleyebilirisniz ve sonra yer tutucu patlayabilir: Bir yer tutucu (# # # # # # PLACEHOLDER yani) kullanarak dizeleri CONCAT için kolay olmaz mıydı ?

Ben bu hile yapmak gerektiğini düşünüyorum:

function trimToWord($string, $length, $delimiter = '...')
{
    $string        = str_replace("\n","",$string);
    $string        = str_replace("\r","",$string);
    $string        = strip_tags($string);
    $currentLength = strlen($string);

    if($currentLength > $length)
    {
        preg_match('/(.{' . $length . '}.*?)\b/', $string, $matches);

        return rtrim($matches[1]) . $delimiter;
    }
    else 
    {
        return $string;
    }
}

Siz bu konuda yardımcı str_word_count için az bilinen bir değiştirici kullanabilirsiniz. Eğer parametre '2 'geçerseniz, o kelime konumu nerede bir dizi döndürür.

Aşağıda bu kullanarak basit bir yoludur, ama daha verimli bir şekilde yapmak mümkün olabilir:

$str = 'This is a string with a few words in';
$limit = 20;
$ending = $limit;

$words = str_word_count($str, 2);

foreach($words as $pos=>$word) {
    if($pos+strlen($word)<$limit) {
        $ending=$pos+strlen($word);
    }
    else{
        break;
    }
}

echo substr($str, 0, $ending);
// outputs 'this is a string'