Intereting Posts
Безопасная связь между скриптом Flash и PHP php foreach loop и кнопка addmore в форме Органы управления Symfony Не найдено ни одного маршрута для «GET /» Symfony при входе в систему редактирование изображения с использованием типа входного файла Eclipse (PDT) досадно блокирует файлы .phtml для типа содержимого PHP Почему var_dump устанавливает значения частных переменных, но при попытке доступа к одному свойству Mysql не может выполнять более одного запроса за раз Создайте пользователя, используя Moodle webservice Как определить динамическую конфигурацию с помощью TreeBuilder? Сохранение и отображение HTML и специальных символов в базе данных mysql безопасно? Динамичная генерация кнопки PayPal – не очень ли она небезопасна? Отправка электронной почты с помощью CodeIgniter с использованием «mail» или «sendmail» Проверка XPath / Domdocument для дочернего объекта по имени класса Переменная Codeigniter Post empty

ограничить строку до первых 5 слов или первых 42 символов в PHP

Если у меня есть строка в PHP, которая является ненавязчиво длинной строкой в ​​PHP, и я хочу ее укоротить, а затем добавить что-то к ней.

Я хочу сократить его до первых 6 слов или 42 символов, что бы ни было короче, а затем добавить к нему «…», если он был сокращен.

Единственный случай, который он не укоротил бы, и «…» не добавил бы, если бы это было первоначально менее 6 слов или 42 символа.

Как я могу это сделать в PHP?

Логично, я бы подумал, что я разделил бы строку на белое пространство, а затем добавлю каждую вещь перед белым пространством в массив и выберем только первые 6 элементов из этого массива и напишу их в новую строку.

Вот код, который у меня есть до сих пор:

str_1 = 'The quick brown fox jumped over the lazy dog'; $words = explode(" ", $str_1); $counter = 0; str_2 = ''; foreach($words as $word){ if($counter < 5){ //append $words[counter] to str_2; counter++; } else{ break; } } 

Я не знаю, как сделать остаток для подсчета символов или сравнения или добавления.

У кого-нибудь есть идеи?

Эта функция, которую я сделал, выглядит довольно аккуратно:

 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) break; $truncated[] = $fragment; } $result = implode($truncated, ' '); if ($input == $result) { return $input; } else { return preg_replace('/[^\w]$/', '', $result) . '...'; } } 

Некоторые тесты:

 $str = 'The quick brown fox jumped over the lazy dog'; echo truncate($str, 5, 42); // The quick brown fox jumped... echo truncate($str, 3, 42); // The quick brown... echo truncate($str, 50, 30); // The quick brown fox jumped over the... echo truncate($str, 50, 100); // The quick brown fox jumped over the lazy dog 

Он не будет вырезать слова пополам, так что, если слово подталкивает счетчик символов по прилагаемому лимиту, оно будет проигнорировано.

считать слова (подразумевает пробелы в пробелах):

 $words = explode(' ', $string); $wordCount = count($words ); 

количество символов

 $length = strlen($string); 

вместе

 if($wordCount > 5) { $words = array_slice($words, 0, 5); $string = implode(' ', $words); $length = strlen($string); } if($length > 42) { $string = substr($string , 0, 42); } 

Это даст вам первые 6 слов или первые n слов, где общая длина слов меньше 42.

 $words = explode(' ', $string); $newstring = ""; $i=0; while (strlen($newstring . $words[$i]) <= 42) && $i < 5) { $newstring .= $words[$i]; } if (strlen($string) > strlen($newstring)) $newstring .= "..."; 
 $string = "Your Text Here"; $string_length = 80; // give a random character value including whitespace. if(strlen($string)>$string_length){ do{ $new_string = substr($string,0,$string_length); $string_length++; }while(ctype_graph(substr($new_string,-1))); } else { $new_string = $string; } echo $new_string; в $string = "Your Text Here"; $string_length = 80; // give a random character value including whitespace. if(strlen($string)>$string_length){ do{ $new_string = substr($string,0,$string_length); $string_length++; }while(ctype_graph(substr($new_string,-1))); } else { $new_string = $string; } echo $new_string;