PHP explode() and If statement


PHP explode() and If statement

我花了6个小时试图找出这个答案。我有下面的代码:

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

$value2包含:

" 'time': 1376952971"

我很确定这个说法应该是真的,但由于某些原因,我一直在说假的(哦,不!(

if($checkiftime=='time'(

可能出了什么问题?我已经尝试过对$checkiftime=="time"使用双引号,但仍然无效。

编辑:

爆炸后我试着做Vardumps:

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

结果是:

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

我不知道为什么"时间"显示为String(13(,我看到了空白,这可能是一个包含1个以上隐藏字符串的特殊字符吗?我做了一个修剪((,但似乎没有改变任何东西。

第2版:

谢谢大家,下面是我修改的代码的一部分,效果很好:

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

我想主要问题是$value2包含一个意外值。

看起来你只需要清除字符串,删除任何可能妨碍检查的字符(如空格和撇号/单引号(。试试这个。。。

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

参见trim()。此处演示-http://ideone.com/uVEDXM

或者,您可以简单地使用正则表达式匹配来检查整个字符串,例如

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

演示-http://ideone.com/025vAV

我不知道为什么你在"时间"的开头有一个空格,也不知道为什么要在它周围加上单引号,但下面的代码会根据你设置它的样子产生一个yes:http://codepad.org/T8yw8Ou5

考虑在这种情况下使用JSON!

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

以上检查字符串time是否存在于$value2中。但如果你需要时间,你可以:

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

这似乎是某些JSON数据的一部分,只是它的格式不正确,因为它使用了单引号字符串(在JavaScript中有效,但在JSON中无效(。如果我们用双引号粗略地替换单引号,并将其封装在{}中以使其成为一个完整的对象,那么很容易用json_decode((解析此字符串,它将处理格式和空格字符的变化,而用explode((进行钝分无法处理这些变化:

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

您的时间值周围有单引号,在字符串中。所以,你需要进行比较:

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

这可能是一堂很好的课,在提出问题之前先检查你的价值观:(

如果你想要,你可以删除单引号:

$checkiftime = str_replace("'", "", $checkiftime);