Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 三元运算符未按预期工作,而是引发错误_Php - Fatal编程技术网

Php 三元运算符未按预期工作,而是引发错误

Php 三元运算符未按预期工作,而是引发错误,php,Php,这是我想要的如果day===1则打印出st否则如果date==2则应打印出nd否则如果date==3打印出rd否则打印出默认的th 下面是发出的错误 Parse error: syntax error, unexpected ':', expecting ',' or ';' 我完全忘记了日期格式S: echo date("DS"); 试试这个: <?php echo date("d")===1 ? "st" :

这是我想要的
如果day===1
则打印出
st
否则
如果date==2
则应打印出
nd
否则如果
date==3
打印出
rd
否则打印出默认的
th

下面是发出的错误

Parse error: syntax error, unexpected ':', expecting ',' or ';' 

我完全忘记了日期格式S:

echo date("DS");
试试这个:

<?php echo date("d")===1 ? 
    "st" : 
    (
        date("d")===2 ?
            "nd" :
            (
                date("d")===3?
                "rd":"th"
            )
    ); // You had here :"th"; ?>

结尾的“th”(参见代码中的注释)打破了三元结构
运算符语法。

当语言语法规则被破坏时,会发生解析错误。您的代码不会编译,因此不会执行。错误是由最后一个圆括号后面的片段“th”产生的。删除它,代码将编译

但是,它无法正常工作,因为您使用
==
将字符串(返回的)与数字(
1
2
3
)进行比较。这样的比较永远不会成功,因为
==
同时比较操作数类型及其值

阅读PHP
=
==
的相关内容

代码中还存在逻辑错误<代码>日期('d')返回月份的当前日期。在每月的21日、22日、23日和31日,代码使用了不正确的后缀

一种更好的方法(也更容易阅读)是使用如下的
switch
语句:

$day=日期('d');
交换机(天){
案例'01':
案例‘21’:
案例'31:
$suffix='st';
打破
案例'02':
案例“22”:
$suffix='nd';
打破
案件'03:
案件‘23’:
$suffix='rd';
打破
违约:
$suffix='th';
打破
}
回音(${day}${suffix}”);
或者,您可以更聪明地工作,而不是更努力地工作,使用
date
j
S
格式说明符,让PHP完成繁重的工作:

echo(日期('jS'));
检查一下



另一种是大约10年前就过时了。我建议您使用该类和。它们更易于用于日期和时间计算,并且可以处理时区(旧函数不能)。

它不会将输出21作为21处理,使用switch语句或使用intl模块来获取序号。我可以问一下为什么会进行向下表决吗?