【问题标题】:Displaying a zero显示零
【发布时间】: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, '', false all 评估为 false,这可能是正在发生的事情。
  • 张贴您的代码,这样我们就可以看到发生了什么,有时这是一件愚蠢的事情,第二双眼睛可以分辨出来。

标签: php output zero


【解决方案1】:

试试这样的

<?php
    echo "{$myZeroVar}";
?>

它对我有用“{$var}”,该格式已停止 php 将其读取为 true/false 并改为字符串

【讨论】:

  • 为什么 OP 应该“试试这个”?请添加对您所做的事情以及您这样做的原因的解释,不仅是为了 OP,而且是为了未来的 SO 访问者。
  • 不错的尝试,但结果相同:)
【解决方案2】:

如何运行测试以查看该值是否为零。然后改成零字符串?

$template = 'Some text with a {value}';
$data = 0;
if (!$data) {
  $data = "0";
}
$template = str_replace('{value}', $data, $template);

【讨论】:

    【解决方案3】:

    为什么不使用sprintf 而不是str_replace?

    这样您就可以在字符串模板中设置数据类型。

    $template = 'Some text with a %d';
    $data = 0;
    $result = sprintf($template, $data);
    

    【讨论】:

    • sprintf 是我的测试之一 :) 我只是在测试错误的地方... :D
    【解决方案4】:

    printf 命令及其朋友可以根据需要处理格式。

    $template = "Some text with a %.0f\n";
    $data = 0;
    $output = sprintf($template, $data);
    

    如果您想在软件中将模板转换为 printf 格式,这也是一种选择。

    $template = "Some text with a {value}\n";
    $data = 0;
    $template_fmt = str_replace('{value}', '%.0f', $template);
    $output = sprintf($template_fmt, $data);
    

    请注意,我使用的是%.0f 而不是%d,因为它让您可以轻松地支持更复杂的浮点数。两者都应该。

    【讨论】:

    • 谢谢我的朋友,但请不要浪费更多时间。 empty() 引起的问题...我不知道应该如何处理这样的线程?
    • @FC' .. 很高兴你解决了它!如果答案中暗示了您的解决方案,请选择带有复选标记的答案。如果不是,并且您的问题以某种方式错过了标记,请在您的问题中澄清,然后发布您自己的答案并选择它。没有人会因此获得“最佳分析者”分数,但它会清楚地确定问题和解决方案是什么,这更重要。
    【解决方案5】:

    我的变量没有显示出来,不是因为一些bug或者配置不好,而是因为只有当变量不是empty()时才会填充模板。

    空函数返回 true 为 0。

    !empty($var) 替换为($var !== '' &amp;&amp; $var !== null) 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多