2011-06-11 91 views
2

我有这个变量:$logged_in_person_rsvp - 它的价值= -1PHP代码段无法正常工作如我所料

然后我运行此代码:

$yes_checked = ($logged_in_person_rsvp===1) ? "checked" : ""; 
$maybe_checked = ($logged_in_person_rsvp===-1) ? "checked" : ""; 
$no_checked = ($logged_in_person_rsvp===0) ? "checked" : ""; 

echo '<p>logged_in_person_rsvp: '.$maybe_checked.'</p>'; 

我也得到如无输出。但我期待的输出是-1

任何人都明白为什么?这是我继承的奇怪语法:)

回答

3

尝试使用二等于像“==”代替迹象3看看这是否有所作为。如果是这样,你的严格比较可能会搞乱你的预期结果。

+0

双等号的工作谢谢! – GeekedOut 2011-06-11 00:49:14

+0

我'在你的代码中,你可能有$ logged_in_person_rsvp是一个字符串或浮点数(更可能),而不是预期的int。尝试'var_dump($ logged_in_person_rsvp);'并查看输出结果 – LazyOne 2011-06-11 00:50:56

1

三元操作应该括在括号内。

$maybe_checked = ($logged_in_person_rsvp===-1 ? "checked" : ""); 

这应该做的伎俩。

编辑:此外,请确保您的$logged_in_person_rsvp是-1整数,而不是'-1'的字符串。或者尝试使用==而不是===。

+0

刚刚尝试过,但它仍然没有工作:( – GeekedOut 2011-06-11 00:45:33

3

你呼应$maybe_checked

$maybe_checked是,要么“检查”或“”,你怎么会想到它是-1?

呼应$logged_in_person_rsvp应该输出-1

===================

回应您的评论:

然后尝试使用运营商==代替

===是两个变量之间

严格比较
+0

是的,你是对的,这是我的错字,我期待值“被检查” – GeekedOut 2011-06-11 00:43:46

1

根据括号中的操作结果,这些变量中的每一个的值都将是“checked”或“”。

($logged_in_person_rsvp===-1) ? "checked" : ""; 

基本上,这样做的是检查$ logged_in_person_rsvp === - 1是否为真或假。如果它是真的,变量将被分配“检查”,如果它是假的,变量将被分配“”。

1

三元语法常常让新手感到困惑。这是使用数组地图来表达你的代码的另一种方法:

$checked = array(FALSE => "", TRUE => "checked"); 

$yes_checked = $checked[($logged_in_person_rsvp===1)]; 
$maybe_checked = $checked[($logged_in_person_rsvp===-1)]; 
$no_checked = $checked[($logged_in_person_rsvp===0)]; 

echo '<p>logged_in_person_rsvp: '.$maybe_checked.'</p>'; 

===是正常等于==运营商只是一个严格的版本。

+0

试图做你所做的在那里,但它没有输出“checked” - 任何想法为什么不能? – GeekedOut 2011-06-11 00:47:30

+0

您可以尝试使用不太严格的比较'=='运算符。如果您说变量'$ logged_in_person_rsvp'预先包含'-1' ,那么'-1'可能是一个字符串而不是一个整数。事后看来'==='类型相等运算符在这里可能完全不需要。 – mario 2011-06-11 00:49:41

0

您是否尝试过var_dump($logged_in_person_rsvp);(或检查xdebug或firephp中的值或您选择的调试器)以确定$logged_in_person_rsvp是什么类型?

使用你提供的片段,如果我设置:

$logged_in_person_rsvp = -1; 

一切工作正常,我也得到<p>logged_in_person_rsvp: checked</p>但如果我设置:

$logged_in_person_rsvp = "-1"; 

然后我得到<p>logged_in_person_rsvp: </p>

由于有人指出,==会试图将双方的比较投向同一型号,但===将chec k类型,如果一个字符串和一个int/float失败。