views:

27

answers:

2

Hi,

I'm trying to filter a number out of a string if that string starts with @. Here's what I thought would do the trick, but it returns nothing more than a blank page.

(May contain lots of mistakes as I'm new to PHP.)

<?php
$String = "@1234 Hello this is a message.";
$StringLength = 1;
Echo "Filtering the number after the @ out of " .$String;
If (substr($String , 0, 1)="@"){ //If string starts with @
    While (is_int(substr($String,1,$StringLength))){ //Check if the X length string after @ is a number.
            $StringLength=$StringLength+1; //If it was a number, up StringLength by one.
    }
    If ($StringLength >= 2){ //If the number is only 1 character long StringLength will be 2, loop completed once.
        $Number = substr($String,1,$StringLength-1);
        Echo $Number;
    }
    Else{ //The string started with @ but the While has never run because it was false.
        Echo "The @ isn't followed by a number.";
    }
Else{ //If string doesn't start with @
    Echo "String doesn't start with @.";
}
?>

What's wrong with my script?

Thanks in advance!

+3  A: 
if(substr($String , 0, 1)=="@")
//                       ^^ 2 equal signs for equality comparison.

BTW your function can be written simply with regex (example). And to get the initial character, use $string[0].

if (preg_match('/^@(\\d+)/', $string, $results)) {
   echo $results[1];
} else {
   if ($string[0] != '@')
     echo "String doesn't start with @.";
   else
     echo "The @ isn't followed by a number.";
}
KennyTM
A: 

Thanks a lot for your much better solution, (my own script still fails to do anything with the == though. ,) got it working :-) .

P.S: Can't reply in-line.