Boomfelled
Boomfelled

Reputation: 535

Truncating a string after x amount of charcters

I have a string that that is an unknown length and characters.

I'd like to be able to truncate the string after x amount of characters.

For example from:

$string = "Hello# m#y name # is Ala#n Colem#n"
$character = "#"
$x = 4

I'd like to return:

"Hello# m#y name # is Ala#"

Hope I'm not over complicating things here!

Many thanks

Upvotes: 0

Views: 93

Answers (3)

Dave
Dave

Reputation: 46249

function posncut( $input, $delim, $x ) {
    $p = 0;
    for( $i = 0; $i < $x; ++ $i ) {
        $p = strpos( $input, $delim, $p );
        if( $p === false ) {
            return "";
        }
        ++ $p;
    }
    return substr( $input, 0, $p );
}
echo posncut( $string, $character, $x );

It finds each delimiter in turn (strpos) and stops after the one you're looking for. If it runs out of text first (strpos returns false), it gives an empty string.

Update: here's a benchmark I made which compares this method against explode: http://codepad.org/rxTt79PC. Seems that explode (when used with array_pop instead of array_slice) is faster.

Upvotes: 4

Iraklis
Iraklis

Reputation: 2772

Something along these lines:

$str_length =  strlen($string)
$character = "#"
$target_count = 4

$count = 0;
for ($i = 0 ; $i<$str_length ; $i++){
    if ($string[$i] == $character) {
        $count++
        if($count == $target_count) break;
    }

}

$result = sub_str($string,0,$i)

Upvotes: 1

gen_Eric
gen_Eric

Reputation: 227180

I'd suggest explode-ing the string on #, then getting the 1st 4 elements in that array.

$string = "Hello# m#y name # is Ala#n Colem#n";
$character = "#";
$x = 4;

$split = explode($character, $string);
$split = array_slice($split, 0, $x);

$newString = implode($character, $split).'#';

Upvotes: 4

Related Questions