我花了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);