Как отобразить первые два слова из строки в div и оставшиеся в другом диапазоне php? - PullRequest
0 голосов
/ 13 октября 2018

Я хочу отобразить строку в другом div и span, но не могу этого сделать.Я использую код ниже, чтобы сделать это, но это не работает.Может ли кто-нибудь помочь мне решить проблему?

Хотите отобразить так:

Строка ввода: Lorem ispum dolor text si образец фиктивного текста.

Вывод: Lorem ispum Долор текст и образец фиктивного текста.

if(!empty($extraData['heading_text']) && str_word_count($extraData['heading_text']) >= 3) :
  $getwords = explode(" ", $extraData['heading_text']);
  echo $getwords[0].' '.$getwords[1] .' '.'<span>'.$getwords[2]. '</span>';
  unset($getwords[0]);
  unset($getwords[1]);
  unset($getwords[2]);
  echo  implode(" ", array_values($getwords));
else :
  echo $extraData['heading_text']; 
endif;

1 Ответ

0 голосов
/ 13 октября 2018

Ну, просто извлеките и выведите токены, которые вас интересуют:

<?php  
$input = "Lorem ispum dolor text si sample dummy text.";
preg_match('/^(\w+\s+\w+)\s+(.*)$/', $input, $token);
echo sprintf("<div>%s</div>\n<span>%s</span>\n", $token[1], $token[2]);

Очевидно, что вывод:

<div>Lorem ispum</div>
<span>dolor text si sample dummy text.</span>

То же самое, конечно, возможно и при использовании explode(),но гораздо более сложный:

<?php
$input = "Lorem ispum dolor text si sample dummy text.";
$word = explode(" ", $input);
echo sprintf("<div>%s %s</div>\n", $word[0], $word[1]);
unset($word[0]); 
unset($word[1]);
echo sprintf("<span>%s</span>\n", implode(" ", $word));

ОБНОВЛЕНИЕ:

Первая альтернатива, основанная на регулярном выражении, работает только для истинных «слов», которые определены довольно строго.Вы можете несколько «ослабить» это строгое поведение, немного изменив выражение:

<?php  
$input = "What we've Done";
preg_match('/^([^\s]+\s+[^\s]+)\s+(.*)$/', $input, $token);
echo sprintf("<div>%s</div>\n<span>%s</span>\n", $token[1], $token[2]);

С этой модификацией результат снова будет таким, как ожидалось:

<div>What we've</div>
<span>Done</span>
...