PHP explode()和If语句

时间:2014-05-07 22:46:30

标签: php if-statement explode

我花了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'" 

我不确定为什么'time'显示为String(13),我看到那个空格,可能是一个包含多个隐藏字符串的特殊字符?我做了一个trim(),但它似乎没有改变任何东西。

EDIT2:

谢谢大家,下面是我修改过的代码的一部分,它运行得很好:

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

5 个答案:

答案 0 :(得分:2)

我猜主要的问题是$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

答案 1 :(得分:0)

我不确定为什么你在'时间'的开头有空格,或者为什么你要保留单引号,但是这里的代码会根据你的样子产生一个是正在设置它: http://codepad.org/T8yw8Ou5

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

答案 2 :(得分:0)

$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 ) )
     );

答案 3 :(得分:0)

这似乎是某些JSON数据的一部分,但它的格式不正确,因为它使用单引号字符串(在JavaScript中有效但在JSON中无效)。如果我们粗略地用双引号替换单引号,并将其包装在{}中以使其成为完整对象,则可以使用json_decode()轻松解析此字符串,这将处理格式和空格字符的变化与爆炸()爆炸分裂不能:

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

答案 4 :(得分:-1)

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

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

在提出问题之前,这可能是检查你的价值观的一个很好的教训:)

如果需要,您可以删除单引号:

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