Я пытаюсь разделить строки пополам, и он не должен разделяться в середине слова.
До сих пор я придумал следующее: 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; }
Просто измените строку:
$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>';