今天早上,在编辑我们的CRON编辑器时,突然无法运行,我发现了一个奇怪的现象,我无法真正解释。希望这里有人能够启发我。0 == *评估结果为true,0 === *评估结果为false
假设有人可以回答这个没有任何上下文,我的问题本质上是“为什么0 == *评估为真?”
详细
我们存储在MySQL表中的所有活动的cron作业的细节。字段分钟,小时,天和月的类型为varchar
,默认为“*”。编辑CRON作业时,我们有一个选择应该从一个取出的行中选择当前值,标记如下$CRON
,后面是一个示例。
阵列([CRONID] => 10 [分钟] => 21 [小时] => 6 [天] => * [个月] => * [平日] => * [文件] => CRON_Prop_44 .PHP [状态] => 1 [CreateBy] => 128 [CREATEDATE] => 2014年2月20日[ChangeBy] => 128 [CHANGEDATE] => 2014年2月20日)
破碎选择
以下操作将生成一个选定星期日作为选定选项。 Inspector显示选项值=“*”和选项值=“0”。
<select name="Weekday">
<option value="*" <?php if ($CRON['Weekday'] == "*") { echo "selected";} ?> >* - Every day</option>
<?php
$x = 0;
while ($x < 7) {
switch ($x) {
case 0:
$dayname = "Sunday";
break;
case 1:
$dayname = "Monday";
break;
case 2:
$dayname = "Tuesday";
break;
case 3:
$dayname = "Wednesday";
break;
case 4:
$dayname = "Thursday";
break;
case 5:
$dayname = "Friday";
break;
case 6:
$dayname = "Saturday";
break;
}
?>
<option value="<?php echo $x; ?><?php if ($CRON['Weekday'] == $x) { echo "selected";} ?> ><?php echo $dayname; ?></option>
<?php
$x++;
}?>
那个星期天也被选中,这一事实使我相信,0 == *
是真的。我可以通过添加===
比较运算符而不是==
来达到上述预期效果,但我不明白为什么。是否与开关有关?选项值=“0”?或者,如标题所示,那0 == *
是真的吗?
的(排序)功能的选择
我认为高于前人的代码是有点乱,所以目前我在做以下。但是,将===
更改为==
仅导致选择星期日。
<select name="Weekday">
<option value="*" <?php if ($CRON['Weekday'] == "*") { echo "selected";} ?> >* - Every day</option>
<?php
$days = array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
$x = 0;
while ($x < 7) {
echo '<option value="' . $x . '" ' . (($CRON['Weekday'] == $x) ? 'selected' : "") . '>' . $days[$x] . '</option>';
$x++;
}
?>
</select>
如果你已经穿了这个帖子的末尾,请告诉我,我缺少的是什么?
Ahhhh我明白了,谢谢。 – jboneca