【发布时间】:2015-04-27 14:19:08
【问题描述】:
我正在使用 str_replace 填充一些值是数字的模板。 当一个数字为 0(零)时,PHP 认为它是假的,什么也不写。
我尝试了在 SO 和网络上找到的所有解决方案:
- intval($myZeroVar)
- floatval($myZeroVar)
- strval($myZeroVar)
- (字符串)$myZeroVar
- ''.$myZeroVar
- 使用 number_format、sprintf、str_pad 进行随机测试...
这些都不起作用。
显示它的唯一方法是将 $myZeroVar 与空格 ($myZeroVar.' ') 连接。
但是如果我不想要这个空间呢??
我做错了吗?也许在 PHP 配置中?
不要告诉我你每次输出数字时都在连接一个空格?
谢谢
编辑:
这是我很棒的模板系统(开个玩笑):
$template = 'Some text with a {value}';
$data = 0;
$template = str_replace('{value}', $data, $template);
结果是:“一些带有”的文本
编辑:已解决
好的。就在我跑去躲到我的桌子底下之前,我必须告诉你,问题出在我出色的模板系统之前的一行:
if(!empty($data)
所以现在我将其替换为 $val === '' || $val === null
一切都很好... 我喜欢浪费时间来解决我造成的问题。
看来我永远不会在这里发表有用的帖子!
谢谢大家。
不要投太多票,这篇文章对新手有点用: 始终检查 3 次!
【问题讨论】:
-
不是每种语言都认为 0 = false 吗?您能否添加更多代码以及您正在获得什么以及您期望什么,不知道您要做什么......
-
“有时我讨厌这种愚蠢的语言。” - 这是一个工匠将其归咎于他的工具。这不是“工具的错”。我从您的问题中删除了该咆哮。
-
@naruto:他想将 0 声明为字符串,而不是作为 false 表示的 int。在我的 easyPHP 开发服务器上, (string)$myZeroVar 正在工作, var_dump('0') 也在工作。我认为它来自您的配置。
-
也可能是您使用的模板系统在输出值之前进行了惰性比较,并且由于惰性比较会将
null, 0, '', falseall 评估为 false,这可能是正在发生的事情。 -
张贴您的代码,这样我们就可以看到发生了什么,有时这是一件愚蠢的事情,第二双眼睛可以分辨出来。