вопросы манипуляции строк PHP - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть следующая строка ...

$string = "True is True (5-7 years)";

что я хочу получить - TiT (5-7 лет)

Я пробовал следующий код, но не повезло...

$string = "True is True (5-7 years)"; 
$explodedString = explode(" ",$string); 
for($i = 0; $i < 4; $i++){ 
    $tempString = substr($explodedString[$i], 0, 1); 
    $finalString .= $tempString; 
}  

Короче говоря, мне нужны первые три слова его инициалов, а оставшиеся в скобках такие же, как это ... ТиТ (5-7 лет).как?

Ответы [ 4 ]

0 голосов
/ 07 декабря 2018

Прежде всего.Создайте пустую переменную.Это будет ваш окончательный результат

$result="";

Тогда вы должны зациклить вашу строку разнесения.На каждой части чеч первый персонаж.Если это не так (добавьте первый символ в переменную результата. Иначе добавьте элемент массива в переменную результата

foreach(explodedString as $t){
If($t[0] !="("){$result.=$t[0];} else{$result.=$t;}
}

В конце цикла вы получите то, что вы хотели

echo $result;
0 голосов
/ 07 декабря 2018

Это хороший случай для использования регулярных выражений:

$str = 'True is True (5-7 years)';
preg_match_all('~\([^()]*\)|\b\w~', $str, $matches);
echo implode("", $matches[0]); // TiT(5-7 years)

Распределение регулярных выражений:

  • \([^()]*\) Сопоставьте что-либо в скобках, включая себя
  • | Или
  • \b\w Совпадение первого символа слова из слова
0 голосов
/ 07 декабря 2018
$string = "True is True (5-7 years)"; 
$new_string = preg_replace('/^([a-z])[a-z]+ ([a-z])[a-z]+ ([a-z])[a-z]+ (\(.+\))$/i', '$1$2$3$4', $string); 
0 голосов
/ 07 декабря 2018

Ваш цикл заходит на один элемент слишком далеко.Если вам нужна первая буква первых 3 слов, она должна быть $i < 3.

. Затем вам следует использовать array_slice() и implode() для объединения остальной части массива.

for ($i = 0; $i < 3; $i++) {
    $finalString .= $explodedString[$i][0];
}
$finalString .= implode(' ', array_slice($explodedString, 3));

DEMO

...