Reputation: 645
I have the following string...
$string = "True is True (5-7 years)";
what I want is to get - TiT(5-7 years)
I have tried the following code but no luck...
$string = "True is True (5-7 years)";
$explodedString = explode(" ",$string);
for($i = 0; $i < 4; $i++){
$tempString = substr($explodedString[$i], 0, 1);
$finalString .= $tempString;
}
In short, I need the first three words of its initials and the remaining in bracket is as it is like this.... TiT(5-7 years). how?
Upvotes: 0
Views: 71
Reputation:
First of all. Create an empty variable. That will be your final result
$result="";
Then youse foreach to loop your explode string. At every part chech the first character. If it's not ( add the first char onto the result variable. else add the whole array element onto the result variable
foreach(explodedString as $t){
If($t[0] !="("){$result.=$t[0];} else{$result.=$t;}
}
At the end of the loop you will get what you wanted
echo $result;
Upvotes: 0
Reputation: 342
$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);
Upvotes: 1
Reputation: 48751
This a good case for using regular expressions:
$str = 'True is True (5-7 years)';
preg_match_all('~\([^()]*\)|\b\w~', $str, $matches);
echo implode("", $matches[0]); // TiT(5-7 years)
Regex breakdown:
\([^()]*\)
Match anything inside parentheses including themselves |
Or\b\w
Match first word character from a wordUpvotes: 2
Reputation: 781716
Your loop is going one element too far. If you want the first letter of the first 3 words, it should be $i < 3
.
Then you should use array_slice()
and implode()
to concatenate the rest of the array.
for ($i = 0; $i < 3; $i++) {
$finalString .= $explodedString[$i][0];
}
$finalString .= implode(' ', array_slice($explodedString, 3));
Upvotes: 1