Intereting Posts
Является ли этот нежелательный ввод, от бота, заполняющего форму на моем веб-сайте, безопасным? Получите все видео качества из блока текста, используя регулярное выражение php-фоновый процесс с использованием функции exec Предварительная обработка Javascript перед загрузкой на клиентскую машину Обновление подписчиков в списке с использованием cURL и Mailchimp API v3 php / mysql: Как вставить строку gzcompress-ed в текстовое поле mysql? Проблема кодировки символов с PHP Простой HTML DOM Parser Лучший способ хранения паролей в базе данных MYSQL PHP bind_params с нулевым MySql Общая ошибка: 2053 Как использовать модуль с PHP для добавления класса CSS в сетку изображений в зависимости от двух разных шаблонов? Лучше ли иметь две отдельные пользовательские таблицы или одну? Когда использовать json и jsonp с jquery $ .ajax? Могу ли я определить свою собственную разметку формы и сопоставить ее с формой, созданной с использованием Gravity Form (wordpress plugin)? Как точно работают статические поля внутри?

Разделить строки пополам (Word-Aware) с помощью PHP

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

До сих пор я придумал следующее: 99% работает:

$text = "The Quick : Brown Fox Jumped Over The Lazy / Dog"; $half = (int)ceil(count($words = str_word_count($text, 1)) / 2); $string1 = implode(' ', array_slice($words, 0, $half)); $string2 = implode(' ', array_slice($words, $half)); 

Это работает, правильно разбивая любую строку пополам в соответствии с количеством слов в строке. Тем не менее, он удаляет любые символы в строке, например, в приведенном выше примере он выводит:

 The Quick Brown Fox Jumped Over The Lazy Dog 

Мне нужно сохранить все символы как: и / в строке после разделения. Я не понимаю, почему текущий код удаляет символы … Если вы можете предоставить альтернативный метод или исправить этот метод, чтобы не удалять символы, было бы весьма полезно 🙂

Посмотрев на ваш пример вывода, я заметил, что все наши примеры отключены, мы даем меньше string1, если середина строки находится внутри слова, а затем дает больше.

Например, середина The Quick : Brown Fox Jumped Over The Lazy / Dog – это The Quick : Brown Fox Ju которая находится в середине слова, этот первый пример дает string2 сломанное слово; нижний пример дает string1 слово split.

Дайте меньше string1 по слову слова

 $text = "The Quick : Brown Fox Jumped Over The Lazy / Dog"; $middle = strrpos(substr($text, 0, floor(strlen($text) / 2)), ' ') + 1; $string1 = substr($text, 0, $middle); // "The Quick : Brown Fox " $string2 = substr($text, $middle); // "Jumped Over The Lazy / Dog" 

Дайте больше string1 на split word

 $text = "The Quick : Brown Fox Jumped Over The Lazy / Dog"; $splitstring1 = substr($text, 0, floor(strlen($text) / 2)); $splitstring2 = substr($text, floor(strlen($text) / 2)); if (substr($splitstring1, 0, -1) != ' ' AND substr($splitstring2, 0, 1) != ' ') { $middle = strlen($splitstring1) + strpos($splitstring2, ' ') + 1; } else { $middle = strrpos(substr($text, 0, floor(strlen($text) / 2)), ' ') + 1; } $string1 = substr($text, 0, $middle); // "The Quick : Brown Fox Jumped " $string2 = substr($text, $middle); // "Over The Lazy / Dog" 
 function split_half($string, $center = 0.4) { $length2 = strlen($string) * $center; $tmp = explode(' ', $string); $index = 0; $result = Array('', ''); foreach($tmp as $word) { if(!$index && strlen($result[0]) > $length2) $index++; $result[$index] .= $word.' '; } return $result; } 

Демо: http://codepad.viper-7.com/I58gcI

Просто измените строку:

 $half = (int)ceil(count($words = (count(explode(" ",$text))) / 2); 

str_word_count() может не считаться: или / как слово.

 function split_half($string){ $result= array(); $text = explode(' ', $string); $count = count($text); $string1 = ''; $string2 = ''; if($count > 1){ if($count % 2 == 0){ $start = $count/2; $end = $count; for($i=0; $i<$start;$i++){ $string1 .= $text[$i]." "; } for($j=$start; $j<$end;$j++){ $string2 .= $text[$j]." "; } $result[] = $string1; $result[] = $string2; } else{ $start = round($count/2)-1; $end = $count; for($i=0; $i<$start;$i++){ $string1 .= $text[$i]." "; } for($j=$start; $j<$end;$j++){ $string2 .= $text[$j]." "; } $result[] = $string1; $result[] = $string2; } } else{ $result[] = $string; } return $result; } 

Используйте эту функцию для разделения строки на половину слова.

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

 function split_title_middle ( $title ) { $title = strip_tags( $title ); $middle_length = floor( strlen( $title ) / 2 ); $new_title = explode( '<br />', wordwrap( $title, $middle_length, '<br />') ); if (isset( $new_title[2] ) ) { $new_title[1] .= ' ' . $new_title[2]; unset( $new_title[2] ); } return $new_title; } // how to use $title = split_title_middle( $title ); echo $title[0] . '<strong>' . $title[1] . '</strong>';