I literally spent 6 hours trying to find this out. I have the code below:

$pieces3 = explode(":", $value2);
$checkiftime = $pieces3[0];
if ($checkiftime == 'time')
{
echo "Yes!";
}
else
{
echo "Oh no!";
}

$value2 contains:

" 'time': 1376952971"

I'm pretty sure the statement should be true but for some reasons, I keep getting false (oh no!)

if ($checkiftime == 'time')

What could be wrong? I already tried using double quotes for $checkiftime=="time" but still no avail.

EDIT:

I tried doing Vardumps after the explode:

var_dump($pieces3);
echo "<br>";
var_dump($value2);
echo "<br>";
var_dump($pieces3[0]);
echo "<br>";

And resulted with:

array(2) { [0]=> string(13) " 'time'" [1]=> string(11) " 1376952971" } 
string(25) " 'time': 1376952971" 
string(13) " 'time'" 

I'm not sure why 'time' shows as String(13), I see that blank space, could that be a special character containing more than 1 hidden string? I did a trim() but it doesn't seem to change anything.

EDIT2:

Thanks everyone, below is the part of the code that I modified and it worked great:

$checkiftime = trim($pieces3[0], " '\t\n\r\0\x0B");
if ($checkiftime == 'time')
有帮助吗?

解决方案

I guess the main problem is that $value2 contained an unexpected value.

It simply looks like you need to sanitise the string, removing any characters that might get in the way of your check (such as space and apostrophe / single-quote). Try this...

$checkiftime = trim($pieces3[0], " '\t\n\r\0\x0B");

See trim(). Demo here - http://ideone.com/uVEDXM

Alternatively, you could simply use a regular expression match to check the entire string, eg

if (preg_match('/^\W*time\W*: (\d+)$/', $value2, $matches)) {
    echo 'Yes!', PHP_EOL;
    var_dump($matches); // $matches[1] contains the numeric value 1376952971
}

Demo - http://ideone.com/025vAV

其他提示

I'm not sure why you have a space in the beginning of your 'time' or why you're keeping the single quotes around it, but here is the code that will produce a yes based on how it looks like you're setting it up: http://codepad.org/T8yw8Ou5

Consider using JSON for a situation like this!

$value2 = " 'time': 1376952971";

if( stristr( $value2 ,'time' ) === FALSE )
{
    echo "Oh no!";
}
else
{
    echo "Yes!";
}

The above checks if string time is present in the $value2 . But if you need the time you could :

echo ( stristr( $value2 ,"'time':" ) === FALSE
        ? ''
        : trim( str_replace( "'time':" ,'' ,$value2 ) )
     );

This appears to be part of some JSON data, except that it's malformed in that it uses single-quoted strings (which is valid in JavaScript but not valid in JSON). If we crudely replace single quotes with double quotes, and wrap it in {} to make it a complete object, it's easy to parse this string with json_decode(), which will handle variations in formatting and space characters that blunt splitting with explode() cannot:

$value = " 'time': 1376952971";
$value = json_decode('{' . strtr($value, "'", '"') . '}');
echo $value->time;
// Outputs: 1376952971

Your time value has single quotes around it, within the string. So, you'd need to make your comparison:

$checkiftime = trim($checkiftime, " \t\n\r\0\x0B");
if ($checkiftime == "'time'") {
...
}

This is probably a good lesson in examining your values before asking a question about it :)

You can remove the single quotes if you want:

$checkiftime = str_replace("'", "", $checkiftime);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top