Bagaimana saya bisa memotong string untuk pertama 20 kata-kata di PHP?

Bagaimana saya bisa memotong string setelah 20 kata-kata di PHP?

Mengomentari pertanyaan (1)
Larutan
function limit_text($text, $limit) {
      if (str_word_count($text, 0) > $limit) {
          $words = str_word_count($text, 2);
          $pos = array_keys($words);
          $text = substr($text, 0, $pos[$limit]) . '...';
      }
      return $text;
    }

echo limit_text('Hello here is a long sentence blah blah blah blah blah hahahaha haha haaaaaa', 5);

Output:

Hello here is a long ...
Komentar (7)

Mengubah nomor 3 jumlah 20 berikut ini untuk mendapatkan lebih 20 kata-kata, atau lulus sebagai parameter. Berikut ini menunjukkan bagaimana untuk mendapatkan 3 kata pertama: (jadi mengubah 3 untuk 20 untuk mengubah nilai default):

function first3words($s, $limit=3) {
    return preg_replace('/((\w+\W*){'.($limit-1).'}(\w+))(.*)/', '${1}', $s);   
}

var_dump(first3words("hello yes, world wah ha ha"));  # => "hello yes, world"
var_dump(first3words("hello yes,world wah ha ha"));   # => "hello yes,world"
var_dump(first3words("hello yes world wah ha ha"));   # => "hello yes world"
var_dump(first3words("hello yes world"));  # => "hello yes world"
var_dump(first3words("hello yes world.")); # => "hello yes world"
var_dump(first3words("hello yes"));  # => "hello yes"
var_dump(first3words("hello"));  # => "hello"
var_dump(first3words("a")); # => "a"
var_dump(first3words(""));  # => ""
Komentar (2)

Untuk Yang Terdekat Ruang

Memotong untuk terdekat sebelumnya ruang karakter target. Demo

  • $str string yang akan dipotong
  • $chars jumlah karakter yang akan dilucuti, dapat diganti dengan $to_space
  • $to_space boolean untuk apakah atau tidak untuk memotong dari ruang dekat $chars batas

Fungsi

function truncateString($str, $chars, $to_space, $replacement="...") {
   if($chars > strlen($str)) return $str;

   $str = substr($str, 0, $chars);
   $space_pos = strrpos($str, " ");
   if($to_space && $space_pos >= 0) 
       $str = substr($str, 0, strrpos($str, " "));

   return($str . $replacement);
}

Contoh

<?php

$str = "this is a string that is just some text for you to test with";

print(truncateString($str, 20, false) . "\n");
print(truncateString($str, 22, false) . "\n");
print(truncateString($str, 24, true) . "\n");
print(truncateString($str, 26, true, " :)") . "\n");
print(truncateString($str, 28, true, "--") . "\n");

?>

Output

this is a string tha...
this is a string that ...
this is a string that...
this is a string that is :)
this is a string that is--
Komentar (0)

gunakan explode() .

Contoh dari dokumen.

// Example 1
$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2

catatan yang meledak memiliki batas fungsi. Jadi anda bisa melakukan sesuatu seperti

$message = implode(" ", explode(" ", $long_message, 20));
Komentar (5)

Coba regex.

Anda perlu sesuatu yang akan cocok dengan 20 kata-kata (atau 20 kata-batas).

Jadi (saya regex mengerikan begitu benar saya jika ini isn't akurat):

/(\w+\b){20}/

Dan berikut ini adalah beberapa contoh regex dalam php]1.

Komentar (1)

Sederhana dan sepenuhnya dilengkapi truncate() metode:

function truncate($string, $width, $etc = ' ..')
{
    $wrapped = explode('$trun$', wordwrap($string, $width, '$trun$', false), 2);
    return $wrapped[0] . (isset($wrapped[1]) ? $etc : '');
}
Komentar (1)

Bukan ciptaan saya sendiri, yang merupakan modifikasi dari posting sebelumnya. kredit pergi ke karim79.

function limit_text($text, $limit) {
    $strings = $text;
      if (strlen($text) > $limit) {
          $words = str_word_count($text, 2);
          $pos = array_keys($words);
          if(sizeof($pos) >$limit)
          {
            $text = substr($text, 0, $pos[$limit]) . '...';
          }
          return $text;
      }
      return $text;
    }
Komentar (0)

Split string (ke array) dengan <spasi>, dan kemudian mengambil 20 elemen dari array.

Komentar (11)

Ini terlihat cukup baik untuk saya:

masalah umum ketika membuat dinamis halaman web (dimana kandungan ini bersumber dari database, manajemen konten sistem atau sumber eksternal seperti RSS feed) adalah bahwa input teks dapat terlalu panjang dan menyebabkan tata letak halaman untuk 'break'.

salah Satu solusinya adalah dengan memotong teks sehingga cocok pada halaman. Ini kedengarannya sederhana, tapi sering hasil ya't seperti yang diharapkan karena kata-kata dan kalimat yang terputus di tidak pantas poin.

Komentar (2)

Dengan tiga titik:

function limitWords($text, $limit) {
    $word_arr = explode(" ", $text);

    if (count($word_arr) > $limit) {
        $words = implode(" ", array_slice($word_arr , 0, $limit) ) . ' ...';
        return $words;
    }

    return $text;
}
Komentar (0)

Jika anda kode pada Laravel hanya menggunakan Illuminate\Support\Str

berikut ini adalah contoh

Str::words($category->publication->title, env('WORDS_COUNT_HOME'), '...')

Harap ini membantu.

Komentar (0)

Hal seperti ini mungkin bisa melakukan trik:

<?php 
$words = implode(' ', array_slice(split($input, ' ', 21), 0, 20));
Komentar (0)

Coba kode di bawah ini,

 $text  = implode(' ', array_slice(explode(' ', $text), 0, 32))
 echo $text;
Komentar (0)

menggunakan PHP tokenizer fungsi strtok() dalam sebuah loop.

$token = strtok($string, " "); // we assume that words are separated by sapce or tab
$i = 0;
$first20Words = '';
while ($token !== false && $i < 20) {
    $first20Words .= $token;
    $token = strtok(" ");
    $i++;
}
echo $first20Words;
Komentar (0)

berdasarkan 動靜能量's jawaban:

function truncate_words($string,$words=20) {
 return preg_replace('/((\w+\W*){'.($words-1).'}(\w+))(.*)/', '${1}', $string);
}

atau

function truncate_words_with_ellipsis($string,$words=20,$ellipsis=' ...') {
 $new = preg_replace('/((\w+\W*){'.($words-1).'}(\w+))(.*)/', '${1}', $string);
 if($new != $string){
  return $new.$ellipsis;
 }else{
  return $string;
 }

}
Komentar (0)

Berikut adalah apa yang saya telah diimplementasikan.

function summaryMode($text, $limit, $link) {
    if (str_word_count($text, 0) > $limit) {
        $numwords = str_word_count($text, 2);
        $pos = array_keys($numwords);
        $text = substr($text, 0, $pos[$limit]).'... <a href="'.$link.'">Read More</a>';
    }
    return $text;
}

Seperti yang anda lihat ini adalah didasarkan dari karim79's jawaban, semua yang perlu berubah adalah bahwa jika pernyataan ini juga diperlukan untuk memeriksa terhadap kata-kata yang tidak karakter.

Saya juga menambahkan sebuah link ke fungsi utama untuk kenyamanan. Sejauh ini hsa bekerja dengan sempurna. Terima kasih untuk asli penyedia solusi.

Komentar (0)

Solusi lain :)

$aContent = explode(' ', $cContent);
$cContent = '';
$nCount = count($aContent);
for($nI = 0; ($nI < 20 && $nI < $nCount); $nI++) {
   $cContent .= $aContent[$nI] . ' ';
}
trim($cContent, ' ');
echo '<p>' . $cContent . '</p>';
Komentar (0)

Ini bekerja untuk UNICODE (UTF-8) kalimat-kalimat yang terlalu:

function myUTF8truncate($string, $width){
    if (mb_str_word_count($string) > $width) {
        $string= preg_replace('/((\w+\W*|| [\p{L}]+\W*){'.($width-1).'}(\w+))(.*)/', '${1}', $string);
    }
    return $string;
}
Komentar (0)

Untuk membatasi kata-kata, saya menggunakan berikut sedikit kode :

    $string = "hello world ! I love chocolate.";
    $explode = array_slice(explode(' ', $string), 0, 4);
    $implode = implode(" ",$explode); 
    echo $implode;

$implot akan memberikan : hello world ! Saya

Komentar (0)
function getShortString($string,$wordCount,$etc = true) 
{
     $expString = explode(' ',$string);
     $wordsInString = count($expString);
     if($wordsInString >= $wordCount )
     {
         $shortText = '';
         for($i=0; $i < $wordCount-1; $i++)
         {
             $shortText .= $expString[$i].' ';
         }
         return  $etc ? $shortText.='...' : $shortText; 
     }
     else return $string;
} 
Komentar (0)